主    题:  我用c#写了一个组件,在这个组件中怎么样调用一个非托管的dll?注意仅仅是一个dll,他提供了函数接口!
作    者:  longxiaojie (小杰)
信 誉 值:  101
所属论坛:  .NET技术 ASP.NET
问题点数:  50
回复次数:  7
发表时间:  2003-6-12 16:24:49

不是注册的那种com组件,就是一个普通的类似系统的dll文件,他只是导出了一个函数接口,怎么调用呀?



回复人: longxiaojie(小杰) ( ) 信誉:101 2003-6-12 16:29:41 得分:0

提供思路就可以!!自己up,高手狂进!

回复人: longxiaojie(小杰) ( ) 信誉:101 2003-6-12 16:40:51 得分:0

接着up!

回复人: ZHANG9652(剑神独孤求败) ( ) 信誉:99 2003-6-12 17:41:36 得分:20

/// <summary>
/// 拨号函数
/// </summary>
[DllImport("Rasapi32.dll", CharSet=CharSet.Auto)]
public static extern int RasDial(int lpRasDialExtensions, string lpszPhonebook,ref RASDIALPARAMS lprasdialparams, int dwNotifierType,Callback lpvNotifier, ref int lphRasConn);

private RASDIALPARAMS RasDialParams;

给你参考

回复人: longxiaojie(小杰) ( ) 信誉:101 2003-6-13 11:05:53 得分:0

不太明白,谢谢呀!

回复人: zzwsz(zzw) ( ) 信誉:95 2003-6-13 11:11:49 得分:5

与调用API的思路一样

回复人: ameng_2002(flyfox) ( ) 信誉:105 2003-6-13 11:30:37 得分:25

利用平台调用这种服务,托管代码可以调用在动态链接库 (DLL)(如 Win32 API 中的 DLL)中实现的非托管函数。此服务将查找并调用导出的函数,然后根据需要跨越互用边界封送其参数(整数、字符串、数组、结构等)。

比如

using System.Runtime.InteropServices;

public class Win32 {
     [DllImport("user32.dll", CharSet=CharSet.Auto)]
     public static extern int MessageBox(int hWnd, String text, String caption, uint type);
}

public class HelloWorld {
    public static void Main() {
       Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
    }
}

回复人: longxiaojie(小杰) ( ) 信誉:101 2003-6-17 16:09:24 得分:0

呵呵,谢谢,搞定了

Contributors: FHL