在C#.net中调用VC 6.0编写的DLL文件

由于VC 6.0编写的DLL没有自描述,所以无法像C#.net编写的DLL一样直接引用调用,一般可以采用两种方法调用。
一、注册成COM组件:用命令regsvr32 DllFilePath进行注册,然后引用到项目。
二、一些非COM组件的DLL文件可以在程序中用如下格式,将其中需要调用的函数一个一个的引用声明出来。一些数据格式的对应见下表。
基本格式:[DllImport("DllFilePath",...)]
                    public static extern void function_name(datetype args,...);
DllImport 属性具有下列行为:
它只能放置在方法声明上。
它具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。
它具有五个命名参数:
 CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值CallingConvention.Winapi。
CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。
ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定ExactSpelling,则使用默认值 false。
PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 SetLastError 参数指示方法是否保留 Win32“上一错误”。如果未指定 SetLastError,则使用默认值false。 它是一次性属性类。
此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。
是的,上面就是MSDN原文内容.好了继续我们的例子,好了,先把我们上面的C代码编译成DLL叫什么呢?那就叫MYDLLTest好了.
[DllImport("MYDLLTest.dll",EntryPoint="average",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
static extern int average(int av[]);

C++数据类型和C#的部分对应关系

C++I/OC#备注
char chr[255]OStringBuilderStringBuilder在使用时,必须指定大小:
StringBuilder strPara = new StringBuilder(255);
KCA_DIRIint 
LPCSTR I string 
int I int 
LPSTR O StringBuilder 
int* O out int 
DWORD I int 
DWORD* O out int 
BOOL I bool 
long* O out long 
HWNDIIntPrt可以用Int32代替,不过建议使用IntPrt


回调函数:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值