[转载]C#调用dephi的dll之详解 – Moveing life – 博客园.
C#调用dephi的dll用DllImport来调用的
一般是用非托管的
具体形式如下:[DllImport(“WZFSE.dll”, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
下面紧接着他的申明函数
public static extern void InitDll(IntPtr handle, bool methodAddress);
申明一个函数就要引用下他的dll
IntPtr这个类型可以申明为其他语言的句柄,指针等。
若要实现其他语言类似C++的函数指针形式 这时我们考虑用C#的委托来实现
将dephi的窗体签入到自己的C#系统里 还有一点比较重要,我们是调用dephi的窗体,此时显示在我们C#窗体中会有dephi的窗体
这时我们怎么办呢 怎么去除dephi中的窗体呢 这时我们就需要用API函数了 API函数在dephi有 C#中也有
在C#中是这么引用的 [DllImport(“user32.dll”, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void MoveWindow(IntPtr handler, int x, int y, int width, int height, bool repaint);
下面插入一个类 这里面包含了怎么引用dephi的dll 以及怎么申明
其中API中的SetWindowLong这个方法是可以实现去除窗体的标题栏的 具体调用SetWindowLong(common.p, GWL_EXSTYLE, GetWindowLong(handle, GWL_EXSTYLE) & (~WS_CAPTION));
但一般完整利用API函数的调用是这样的
2 BaseCommon.ComplianceCommon.CompliancePlatDLL.InitDll(this.Handle, de1(this.Handle));//初始化
3 common.p = BaseCommon.ComplianceCommon.CompliancePlatDLL.wzLoadModule(“DoRiskSetup“, “”, 0);//取得句柄
4 if (common.p != (IntPtr)0)//判断该句柄不是弹出窗体时
5 {
6 //去除dephi窗体的标题栏
7 BaseCommon.ComplianceCommon.CompliancePlatDLL.SetParent(common.p, panel1.Handle);
8 BaseCommon.ComplianceCommon.CompliancePlatDLL.SetWindowLong(common.p, BaseCommon.ComplianceCommon.CompliancePlatDLL.GWL_EXSTYLE, BaseCommon.ComplianceCommon.CompliancePlatDLL.GetWindowLong(common.p, BaseCommon.ComplianceCommon.CompliancePlatDLL.GWL_EXSTYLE) & (~BaseCommon.ComplianceCommon.CompliancePlatDLL.WS_CAPTION));
9 BaseCommon.ComplianceCommon.CompliancePlatDLL.MoveWindow(common.p, 0, 0, panel1.ClientSize.Width, panel1.ClientSize.Height, false);
10 }
注:上面的dll的名称只是个例子 具体还要看你要引用哪个dll API中的函数在C#中是这样引用的
表达能力有限 希望对你们有帮助··具体不懂可邮箱联系: elivn@vip.qq.com