C# 调用 Delphi Dll链接库方法及示例

来源:互联网 发布:ubuntu如何安装gnome 编辑:程序博客网 时间:2024/05/16 11:09


每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用Delphi DLL的方法进行介绍

首先要搞清楚一点的是:什么是托管,什么是非托管?

一般可以认为:非托管代码主要是基于win 32平台开发的DLL,activeX的组件,托管代码是基于.net平台开发的

C# 调用DLL中的非托管函数一般方法

首先,应该在C#语言源程序中声明外部方法,其基本形式是:

[DLLImport(“DLL文件”)]

修饰符 extern 返回变量类型 方法名称 (参数列表)

其中:

DLL文件:包含定义外部方法的库文件。

修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。

返回变量类型:在DLL文件中你需调用方法的返回变量类型。

方法名称:在DLL文件中你需调用方法的名称。

参数列表:在DLL文件中你需调用方法的列表。

注意:需要在程序声明中使用System.Runtime.InteropServices命名空间。

      DllImport只能放置在方法声明上。

DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)。

返回变量类型、方法名称、参数列表一定要与DLL文件中的定义相一致。

下面结合示例如:

        [DllImport("TestDll.dll", EntryPoint = "SayHello")]      "TestDll.dll"为dll名称,EntryPoint 为函数名
        static extern string SayHello(string Name);              //delphi 中的函数
        private string GetMessage()                                  //C#自己写的函数,并调用Dll函数
        {
            return SayHello("");
        }

   当前程序中调用 GetMessage时就会返回Dll SayHello 函数的内容

  其中,Dll SayHello函数如下(Delphi语言):

 function SayHello(NameTool:PChar):PChar;stdcall;
  begin
    if Length(NameTool) <=0 then
      Result := PChar('Hello Person,welcome to chian.')
    else
      Result := PChar('Hello '+ NameTool + ', welcome to chian.');
  end;

另外,如果需要调用传值,的方法时,通过Delphi的参数 var 与C#中的ref关键字结合使用如:

procedure ChangeNumber(var number:Integer);stdcall;
  begin
    number := 100;
  end;

C#调用如下:

private int MyNumber = 150;

[DllImport("TestDll.dll", EntryPoint = "ChangeNumber")]
 static extern void ChangeNumber(ref int count);
 private void Changes()
 {
     ChangeNumber(ref MyNumber);
 }

当C#程序中调用  Changes方法后,MyNumber的值将会改变为100

以上为C#简单调用Delphi Dll的方法。其中要注意的有:

DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)。

返回变量类型、方法名称、参数列表一定要与DLL文件中的定义相一致。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 出了事故家属闹怎么办 孩子不愿和人交流怎么办 4岁双胞胎说话迟怎么办 三岁宝宝说话迟怎么办 3岁幼儿说话迟钝怎么办 人很迷茫的时候怎么办 人在迷茫的时候怎么办 缺乏安全安感该怎么办 皮球掉进树洞里怎么办 遇到不会读的字怎么办 机票行程单假的怎么办 老婆失忆了怎么办微盘 精神差总想睡觉怎么办 孕妇查溶血值256怎么办 饿了怎么办txt百度云 小猫喜欢和人睡怎么办 房子卖了后户口怎么办 若房子卖了户口怎么办 我房子卖了户口怎么办 雄安房子不卖怎么办 擦伤后留下红印怎么办 膝盖摔伤了破皮怎么办 膝盖擦破皮肿了怎么办 跪久了膝盖疼怎么办 摔倒了膝盖肿了怎么办 膝盖摔伤了肿了怎么办 膝盖破皮流血了怎么办 擦伤化脓又肿了怎么办 摔倒了膝盖破皮怎么办 膝盖擦伤碰水了怎么办 收脚运动裤长了怎么办 1岁宝宝发烧反复怎么办 3岁宝宝反复发烧怎么办 3岁宝宝咳嗽发烧怎么办 心里郁闷憋的好难过怎么办 鸟大了怎么办百度云 怀孕8个月喉咙痛怎么办 感冒后嗓子哑了怎么办 含服的药口服了怎么办 含服的药吞了怎么办 伤湿止痛膏过敏怎么办