110,533
社区成员
发帖
与我相关
我的任务
分享
MYLIB_API void PrintMsg(const char*msg)
{
printf("msg=%s\n",msg);
}
class Program
{
[DllImport("MyLib.dll"]
static extern void PrintMsg(string s);
[STAThread]
static void Main(string[] args)
{
PrintMsg("abc");
}
}
[DllImport(@"D:\Users\a\Documents\Visual Studio 2012\Projects\ATLProject1\Debug\MyLib.dll")]
extern "C" MYLIB_API void PrintMsg(const char*msg)
因为不加上extern "C" 的话PrintMsg会被C++编译器重命名,自然就找不到名为“Print
Msg”的入口点了,如果不想或者是其他原因不能增加extern "c"的话,你可以在VS命令提示行下使用
dumpbin /exports dllFileName 命令查看PrintMsg的真正导出名,然后 在C#里就用PrintMsg的真正导出名了