日期:2014-05-19  浏览次数:20860 次

C#使用C/C++的dll遇到的奇怪问题
//   cmdll.c
//   compile   with:   /LD   /MD
int   __declspec(dllexport)   SampleMethod(int   i)
{
        return   i*10;
}
//cmdll.cpp
//compile   with:/LD   /MD
int   __declspec(dllexport)   SampleMethod(int   i)
{
        return   i*10;
}
两个文件完全相同,编译都生成cmdll.dll文件
第一个文件产生的dll在C#中可以调用,第二个提示找不到SampleMethod的入口点
public   partial   class   Form1   :   Form
  {  
    [DllImport( "Cmdll.dll ")]
    public   static   extern   int   SampleMethod(int   x);
  public   Form1()
                {
                        InitializeComponent();
                        //SnmpCleanup();
                        //MessageBox(0,   "abc ",   "def ",   0);
                        MessageBox.Show( " "   +   SampleMethod(1));
                       
                }
}

------解决方案--------------------
用w32asm查看dll的输出
第一个因该是标准输出SampleMethod
第二个可能是非标准输出SampleMethod@@一串数字
------解决方案--------------------
解决方法 建def文件 变成标准输出
------解决方案--------------------
C和C++编译后对函数名的解析是不一样的,加个extern "C "应该就可以了