C#调用Delphi的dll之详解-完整版_附有可下载Demo
2010-11-19 12:33
711 查看
C#调用Delphi接口方法,有两种解决办法:
一、将Delphi程序编译成一个COM组件,然后在C#里引用COM组件。
二、非托管调用Dephi的DLL文件。
这里我们主要讲解一下第二种方法,讲第二种方法之前首先讲解下DllImport。
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。
DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
DllImport的定义如下:
代码
1 decallback de1 = new decallback(iscallback);//利用委托
2 InitDll(this.Handle, de1(this.Handle));//初始化
3 IntPtr p = wzLoadModule("DoRiskSetup", "", 0);//取得句柄
4 if (p != (IntPtr)0)//判断该句柄不是弹出窗体时
5 {
6 //去除dephi窗体的标题栏
7 SetParent(p, panel1.Handle);
8 SetWindowLong(p, GWL_EXSTYLE, GetWindowLong(p, GWL_EXSTYLE) & (~WS_CAPTION));
9 MoveWindow(p, 0, 0, panel1.ClientSize.Width, panel1.ClientSize.Height, false);
10 }
SetWindowLong(IntPtr handle, int t,long l) 第一个参数为句柄,是你调的dephi窗体的句柄,第二个参数为整型,在dephi用常量GWL_EXSTYLE表示,表示要显示的样式,在C#中翻译过来的他值为(-16),而第三个函则为长整型和第二个参数一起表示要去除第一个参数句柄窗体的标题栏在Delphi中表示为:GetWindowLong(handle,GWL_EXSTYLE) and (not WS_CAPTION) 在C#中则翻译为:GetWindowLong(handle,-16)&(~0xC00000),handle是指要调用的Delphi窗体的句柄,GetWindowLong这个函数是获得该窗体的相关信息。大体上是这个用法,如有不懂大家可以提出来 共同探讨。
一般类型对应如下:
Dephi-->C#
intger -->int
longint -->long
pchar -->string
THandle -->IntPtr
上图为C#窗体调用的Delphi的情况。
注:上面的dll的名称只是个例子 具体还要看你要引用哪个dll API中的函数在C#中是这样引用的
表达能力有限 希望对你们有帮助··具体不懂可邮箱联系:点击此处
调Delphi的DLL.rar 一个简单的调用Demo, 希望对大家有用。由于自己使用的地方文件太大就用了同事的一个简单的调用Delphi的Demo。http://www.elivn.com/ <a href="http://www.elivn.com/%22%3Eelivn%3C/a>
如有转载 请注明出处!
一、将Delphi程序编译成一个COM组件,然后在C#里引用COM组件。
二、非托管调用Dephi的DLL文件。
这里我们主要讲解一下第二种方法,讲第二种方法之前首先讲解下DllImport。
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。
DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
DllImport的定义如下:
代码
1 decallback de1 = new decallback(iscallback);//利用委托
2 InitDll(this.Handle, de1(this.Handle));//初始化
3 IntPtr p = wzLoadModule("DoRiskSetup", "", 0);//取得句柄
4 if (p != (IntPtr)0)//判断该句柄不是弹出窗体时
5 {
6 //去除dephi窗体的标题栏
7 SetParent(p, panel1.Handle);
8 SetWindowLong(p, GWL_EXSTYLE, GetWindowLong(p, GWL_EXSTYLE) & (~WS_CAPTION));
9 MoveWindow(p, 0, 0, panel1.ClientSize.Width, panel1.ClientSize.Height, false);
10 }
SetWindowLong(IntPtr handle, int t,long l) 第一个参数为句柄,是你调的dephi窗体的句柄,第二个参数为整型,在dephi用常量GWL_EXSTYLE表示,表示要显示的样式,在C#中翻译过来的他值为(-16),而第三个函则为长整型和第二个参数一起表示要去除第一个参数句柄窗体的标题栏在Delphi中表示为:GetWindowLong(handle,GWL_EXSTYLE) and (not WS_CAPTION) 在C#中则翻译为:GetWindowLong(handle,-16)&(~0xC00000),handle是指要调用的Delphi窗体的句柄,GetWindowLong这个函数是获得该窗体的相关信息。大体上是这个用法,如有不懂大家可以提出来 共同探讨。
一般类型对应如下:
Dephi-->C#
intger -->int
longint -->long
pchar -->string
THandle -->IntPtr
上图为C#窗体调用的Delphi的情况。
注:上面的dll的名称只是个例子 具体还要看你要引用哪个dll API中的函数在C#中是这样引用的
表达能力有限 希望对你们有帮助··具体不懂可邮箱联系:点击此处
调Delphi的DLL.rar 一个简单的调用Demo, 希望对大家有用。由于自己使用的地方文件太大就用了同事的一个简单的调用Delphi的Demo。http://www.elivn.com/ <a href="http://www.elivn.com/%22%3Eelivn%3C/a>
如有转载 请注明出处!
相关文章推荐
- C#调用Delphi的dll之详解-完整版_附有可下载Demo
- Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
- CommMonitor8.0 串口过滤驱动 SDK DLL版本 C#/Delphi调用DEMO
- Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
- C#调用Delphi的dll之详解
- Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
- C#调用Delphi的dll之详解
- C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)
- C#中调用DLL时未能加载文件或程序集错误的处理方法(详解)
- C#中如何调用Delphi写的Dll
- c#调用delphi开发的dll的指针参数
- 关于delphi Com+调用C# DLL的一点说明
- 【原创】PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- C#调用dll的简单demo(托管)
- C#调用delphi生成的dll获取CPU序列号(一)
- 【摘自网上】Delphi 调用 C# dll
- C#调用C/C++动态链接库(.dll)详解
- C#调用DELPHI的DLL时传递string数组
- C#的DLL注册为COM,Delphi来调用
- delphi 调用 C# COM DLL 解析C#数据集