在C++中轉換C++ DLL時遇到一些問題。只能在C#應用程序中使用C++ DLL中的1/4函數
它正在工作.. DLL中的第一個C++函數只是:int subtractInts(int x, int y)
和它的典型身體沒有問題。所有其他功能都很簡單,並經過測試。但是,我一直在遵循一個教程,並做一些時髦的東西來使用C#中的代碼作爲C++ DLL(用於可移植性)。
我的步驟是:
•創建一個C++類,測試並保存它 - 僅使用 'class.cpp' 和 'class.h' 文件 •創建Visual Studio 2010中一個Win32庫項目選擇DLL在啓動時和每個功能我希望暴露給C#..下面的代碼
extern "C" __declspec(dllexport) int addInts(int x, int y)
extern "C" __declspec(dllexport) int multiplyInts(int x, int y)
extern "C" __declspec(dllexport) int subtractInts(int x, int y)
extern "C" __declspec(dllexport) string returnTestString()
相當關鍵的一點,那就是我externed他們在我的DLL的順序。
然後作爲一個測試,因爲我沒有以前有這個問題..我引用他們以不同的方式在我的C#項目
[DllImport("C:\\cppdll\\test1\\testDLL1_medium.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int subtractInts(int x, int y);
public static extern int multiplyints(int x, int y);
public static extern int addints(int x, int y);
public static extern string returnteststring();
這項工作時調用從C#是subtractInts的唯一功能,這顯然是該函數首先被引用。所有其他人在編譯時會導致錯誤(見下文)。
如果我不註釋掉上面的代碼,並從外部引用所有這些函數。我在multipyInts(int x,int y)處得到以下錯誤。
Could not load type 'test1DLL_highest.Form1' from assembly 'test1DLL_highest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'multiplyints' has no implementation (no RVA).
我會想象排序,將排序一切。
乾杯。
將它們全部歸屬於DLLI
JSJ
2013-03-14 15:49:21