日期:2014-05-20  浏览次数:20845 次

有关P/Invoke的一个问题.
MSDN上有个P/Invoke的例子,用C#代码调用C写的dll.
我在VS   2005上试了,新建一个解决方案,然后新建一个C++   Class   Library,新建一个C#   Console   Project,并且把C++的项目添加到了C#项目的引用中.
C#中代码:
[DllImport( "Demo.dll ")]
public   static   extern   int   GetExtn(int   x);

C++中代码:
int   __declspec(dllexport)   GetExtn(int   x)   {   return   17020   +   x;   }

可是调用的时候,总说在该DLL中找不到名为GetExtn的入口点;用depends查了一下,发现函数名称很奇怪,是?GetExtn%A...什么的,需要Undecorate才能看到函数名,但是User32.dll却无论如何都是直接的函数名称.

之前看到人说C++编译的时候编码不一样,调用函数名也不一样,可是我用过CharSet.Unicode,Auto,什么的,都不行~~C++工程编译的时候,选择编码是Unicode.到底应该怎么做?哪位达人给个参考,最简单的调用例子就行了~~十分感谢~~

------解决方案--------------------
extern "C " int __declspec(dllexport) __stdcall GetExtn(int x) { return 17020 + x; }
实实