c# 导入c++ dll
1.类的函数的内联实现 #include "stdafx.h" #include "testdll.h" #include <iostream> #include "testdll.h" using namespace std; #ifndef TestDll_H_ #define TestDll_H_ #pragma once #define DLL_EXPORTS #ifdef DLL_EXPORTS //#define DLL_API extern "C" __declspec(dllexport) #define DLL_CLASS __declspec(dllexport) #else /*#define DLL_API extern "C" __declspec(dllimport) */ #define DLL_CLASS __declspec(dllimport) #endif #include <iostream> //DLL_CLASS是关键字不可缺省 class DLL_CLASS MyOGRE1 { public: void MyOGREHello() { std::cout << "Hello MyOGRE_Hello()" <<"NIMEI"<< std::endl; } }; #endif 2.函数的声明与实现分开 .h文件 using namespace std; #ifndef TestDll_H_ #define TestDll_H_ #pragma once #define DLL_EXPORTS #ifdef DLL_EXPORTS //#define DLL_API extern "C" __declspec(dllexport) #define DLL_CLASS __declspec(dllexport) #else /*#define DLL_API extern "C" __declspec(dllimport) */ #define DLL_CLASS __declspec(dllimport) #endif class DLL_CLASS MyOGRE1 { public: void MyOGREHello(); }; #endif cpp文件 #include "stdafx.h" #include "testdll.h" #include <iostream> #include "testdll.h" using namespace std; void MyOGRE1::MyOGREHello() { cout << "66666" << endl; } c#代码 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication17 { [StructLayout(LayoutKind.Sequential)] public class MyOGRE { //该方式是直接调用C++ DLL内的类的成员函数。 QAEXXZ [DllImport("MyDLL.dll", EntryPoint = "?MyOGREHello@MyOGRE1@@QAEXXZ")] public static extern void MyOGREHello(); } class Program { #region 1 static void Main(string[] args) { MyOGRE.MyOGREHello(); Console.ReadKey(); } #endregion } }