在网上找了很久,终于看到关于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为“冰火混合物”。这个是关于调用约定的问题。这个要根据所调用方法进行调整。
最后一个问题,是关于不同语言编译的动态链接库所对应的类型转换问题。这个在网上有很多帖子我就不赘述了。
上面的东西仅仅是我的个人看法,如果有什么不妥的地方,还请见谅。