知识大全 C#使用Dllmport来调用dephi的dll
Posted 函数
篇首语:白日放歌须纵酒,青春作伴好还乡。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#使用Dllmport来调用dephi的dll相关的知识,希望对你有一定的参考价值。
C#使用Dllmport来调用dephi的dll 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一般是用非托管的 具体形式如下 [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( user 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 以及怎么申明 代码 public class CompliancePlatDLL public static string strPath = ; /// <summary> /// 初始化 /// </summary> /// <param name= handle ></param> /// <param name= methodAddress ></param> [DllImport( WZFSE dll CharSet = CharSet Ansi CallingConvention = CallingConvention StdCall)] public static extern void InitDll(IntPtr handle bool methodAddress) /// <summary> /// 加载相应的服务 /// </summary> /// <param name= str ></param> /// <param name= str ></param> /// <param name= i ></param> /// <returns></returns> [DllImport( WZFSE dll CharSet = CharSet Ansi CallingConvention = CallingConvention StdCall)] public static extern IntPtr wzLoadModule(string str string str int i) /// <summary> /// 去除相应的服务 /// </summary> /// <param name= handle ></param> /// <returns></returns> [DllImport( WZFSE dll CharSet = CharSet Ansi CallingConvention = CallingConvention StdCall)] public static extern bool wzUnloadModule(IntPtr handle) #region API函数 /// <summary> /// API函数 设置主辅窗体 /// </summary> /// <param name= child ></param> /// <param name= parent ></param> [DllImport( user dll CharSet = CharSet Ansi CallingConvention = CallingConvention StdCall)] public static extern void SetParent(IntPtr child IntPtr parent) /// <summary> /// API函数 移动窗体 /// </summary> /// <param name= handler ></param> /// <param name= x ></param> /// <param name= y ></param> /// <param name= width ></param> /// <param name= height ></param> /// <param name= repaint ></param> [DllImport( user dll CharSet = CharSet Ansi CallingConvention = CallingConvention StdCall)] public static extern void MoveWindow(IntPtr handler int x int y int width int height bool repaint) [DllImport( user dll EntryPoint = GetWindowLong )] public static extern long GetWindowLong(IntPtr hwnd int nIndex) /// <summary> /// API函数 去除窗体的标题栏 /// </summary> /// <param name= hwnd ></param> /// <param name= nIndex ></param> /// <param name= dwNewLong ></param> /// <returns></returns> [DllImport( user dll EntryPoint = SetWindowLong )] public static extern long SetWindowLong(IntPtr hwnd int nIndex long dwNewLong) public const int GWL_EXSTYLE = ; public const int WS_EX_TRANSPARENT = x ; public const int WS_EX_LAYERED = x ; public const int LWA_ALPHA = ; public const int WS_CAPTION = xC ; #endregion 其中API中的SetWindowLong这个方法是可以实现去除窗体的标题栏的 具体调用SetWindowLong(mon p GWL_EXSTYLE GetWindowLong(handle GWL_EXSTYLE) & (~WS_CAPTION)) 但一般完整利用API函数的调用是这样的 代码 decallback de = new decallback(iscallback) //利用委托 InitDll(this Handle de (this Handle)) //初始化 IntPtr p = wzLoadModule( DoRiskSetup ) //取得句柄 if (p != (IntPtr) )//判断该句柄不是弹出窗体时 //去除dephi窗体的标题栏 SetParent(p panel Handle) SetWindowLong(p GWL_EXSTYLE GetWindowLong(p GWL_EXSTYLE) & (~WS_CAPTION)) MoveWindow(p panel ClientSize Width panel ClientSize Height false) 其实初用者在调用dll的窗体时 我们只是让他嵌入到自己的系统中 比如C#窗体 这时我们就可能丈二和尚摸不到头脑了 这时我们就需要用底层函数 API函数 其实当我们知道用那个函数调用时 我们可能也会不知道传什么参数发愁 SetWindowLong(IntPtr handle int t long l) 第一个参数为句柄 是你调的dephi窗体的句柄 第二个参数为整型 在dephi用常量GWL_EXSTYLE表示 表示要显示的样式 在C#中翻译过来的他值为( ) 而第三个函则为长整型 和第二个参数一起表示要去除第一个参数句柄窗体的标题栏在dephi中表示为 GetWindowLong(handle GWL_EXSTYLE) and (not WS_CAPTION) 在C#中则翻译为 GetWindowLong(handle )&(~ xC ) handle还是指要调用的dephi窗体的句柄 GetWindowLong这个函数是获得该窗体的相关信息 大体上是这个用法 如有不懂大家可以提出来 共同探讨 点击查看大图 上图为C#窗体调用的dephi的情况 注 上面的dll的名称只是个例子 具体还要看你要引用哪个dll API中的函数在C#中是这样引用的 cha138/Article/program/net/201311/11747相关参考
使用csc命令将cs文件编译成dll的过程很多时候我们需要将cs文件单独编译成dll文件 操作如下:打开命令窗口>输入cmd到控制台>cd C:WINDOWSMic
在C#中动态调用nativedll的导出函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在C
JNA调用DLL一点小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
利用JNative实现Java调用dll动态库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由
asp调用C#编写的DLL发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一直想写一个a
怎样在MFC中调用C#编写的DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一使用/clr
C#实现动态调用WindowsDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 部分代码来自
VB动态调用自己的ActiveXDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
知识大全 如何在Delphi中调用.Net编写的DLL中的函数
如何在Delphi中调用.Net编写的DLL中的函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java中调用本地代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java中调用dll中本地