知识大全 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

相关参考

知识大全 asp.net源程序编译为dll文件并调用过程

  使用csc命令将cs文件编译成dll的过程很多时候我们需要将cs文件单独编译成dll文件 操作如下:打开命令窗口>输入cmd到控制台>cd C:WINDOWSMic

知识大全 在C#中动态调用native dll的导出函数

在C#中动态调用nativedll的导出函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在C

知识大全 JNA调用DLL一点小结

JNA调用DLL一点小结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 利用JNative实现Java调用dll动态库

利用JNative实现Java调用dll动态库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由

知识大全 asp调用C#编写的DLL发送邮件

asp调用C#编写的DLL发送邮件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一直想写一个a

知识大全 怎样在MFC中调用C#编写的DLL

怎样在MFC中调用C#编写的DLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一使用/clr

知识大全 C#实现动态调用Windows DLL

C#实现动态调用WindowsDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  部分代码来自

知识大全 VB动态调用自己的ActiveX DLL

VB动态调用自己的ActiveXDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 如何在Delphi中调用.Net编写的DLL中的函数

如何在Delphi中调用.Net编写的DLL中的函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Java中调用本地代码

Java中调用本地代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java中调用dll中本地