C#中关于DLL的基础调用和获取DLL的入口点

 在网上找了很久,终于看到关于DllImport的一些资料。

自己就稍微总结一下DLLIMPORT的一些方法和经验。让跟我一样的菜菜们能够走更少的路。

DllImport是静态调用动态链接库的方法。在C++中相当于动态链接库的头文件的作用。

DllImport要使用好有以下基本的因素。

首先,需要写上加载的动态库文件名。

然后,要注意函数的入口点EntryPoint。函数的入口点可以通过运行各种命令行工具获得。MSDN中写到:“例如,可以使用 dumpbin /exports user32.dll 或 link /dump /exports user32.dll 来获取函数名。”这里的函数名即为函数的入口点。

接着是传入字符CHARSET的问题。传入字符分为ANSI和UNICODE两种。

然后是传递字符串的处理问题。如果从C#传入字符串到C++,那么还要考虑在C++ 的DLL中对字符的提取。比如,在C++中 char* tmpName = "Hello!"; 执行这个语句的时候,C++直接把它转换成string类型。当你输出 cout << tmpName; 时,它直接就输出了 Hello! 。而从C#传入的字符串仅仅只是字符串的地址没有像string,拥有一系列属性。这个问题我还没有完整的好的解决方法。

还有一个问题是CallingConvention的问题。这个问题的认识我还得感谢我的好朋友,他的ID为“冰火混合物”。这个是关于调用约定的问题。这个要根据所调用方法进行调整。

最后一个问题,是关于不同语言编译的动态链接库所对应的类型转换问题。这个在网上有很多帖子我就不赘述了。

上面的东西仅仅是我的个人看法,如果有什么不妥的地方,还请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值