日期:2014-05-18  浏览次数:20788 次

求extern "C" 用法解释
C# code
extern   "C"   SAMPLEDLL_API   bool Connect_Net(string ipadd, int portl);
extern "C" __declspec(dllexport) bool Connect_Net(string ipadd, int portl);


我把这句话复制到VS里 就报错
说函数要有返回值

前面加上DLLIMPORT还是报错
C# code
[DllImport("zkemkeeper.dll")]
        static private extern bool Connect_Net(string ipadd, int portl);
extern   "C"   SAMPLEDLL_API   bool Connect_Net(string ipadd, int portl);


这个东西得怎么用啊 
我现在这个函数在最后一句报错 Connect_Net("com3", 122);无法在 DLL“zkemkeeper.dll”中找到名为“Connect_Net”的入口点。为什么啊 定义对象能调用 直接DLL就调用不了吗
C# code
 public partial class Form1 : Form
    {

        [DllImport("zkemkeeper.dll")]
        static private extern bool Connect_Net(string ipadd, int portl);
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //[DllImport("kernel32.dll")]
            //public static extern bool Beep(int frequency, int duration);
            zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
            axCZKEM1.Connect_Net("com3", 122);
            Connect_Net("com3", 122);
           
        }
    }


求高手解答

------解决方案--------------------
zkemkeeper.dll 是一个非.net的dll吗?

如果过是,直接DllImport就可以了。

extern "C" 是用在C++里的。
------解决方案--------------------
还有,就是从你的代码看,你已经通过添加引用 引用了zkemkeeper.dll。如果这是一个非.net的dll,那么VS已经自动帮你interop它了。所以你不需要再次DllImport就可以直接使用其中的类及其方法。
------解决方案--------------------
dll文件的,供外部调用

------解决方案--------------------
extern "C" 是用在C++里的
------解决方案--------------------
C++调用C编译器编译的模块时,就要加上extern "C".
------解决方案--------------------
添加对这个dll的引用了吗?