我對C++不太瞭解,但是我必須使用.NET來編寫一些C++代碼。我嘗試DLLImport,但我失敗了。所以我嘗試用C++/CLI來做一個包裝。C++/CLI如何翻譯此代碼?
但我不知道明白了一切......
這是我想要導出的函數(MyFunction的)基本的C + + H文件
extern "C"
{
__declspec(dllexport) IplImage* MyFunction(IplImage *src, std::string* name, OneEnumerationType myEnum, bool myBool, float myFloat);
}
這是包裝H代碼。
#include "MyFunction.h"; // the file containing the h code
#include <string>
namespace MyWrapper{
public ref class MyWrapperClass {
public:
MyWrapper(){};
IplImage^ GetMyFunction(IplImage *src, std::string^ name, OneEnumerationType myEnum, bool myBool, float myFloat);
}
這是Wrapper cpp代碼。
#include "MyWrapperCode.h";
namespace MyWrapper{
IplImage^ MyWrapperClass::GetMyFunction(IplImage* src, std:string^ name, OneEnumerationType myEnum, bool myBool, float myFloat){
MyFunction(src, name, myEnum, myBool, myFloat);
}
}
這是我的問題:
1)當我編譯,錯誤是「‘^:不能用在類型的IplImage這種間接’和相同的消息類型‘的std :: string’ 。 我已經遵循了這一邏輯:
ClasseNative clNat2 = *clNat; --> ClasseManagee clMan2 = *clMan;
ClasseNative &clNat3 = clNat2; --> ClasseManagee %clMan3 = clMan2;
ClasseNative *clNat4 = &clNat2; --> ClasseManagee ^clMan4 = %clMan2;
我所看到的,這是更好地使用系統::字符串我嘗試這種方式,但最初的功能是使用的std :: string ......順便說一句,這是爲什麼。更換好嗎?
2)如何獲得MyFunction IplImage結果?直通一個私有成員和得到我想,但我不知道如何初始化它...
3)棘手的問題。是否有可能讓CLI在IplImage .NET結構中獲得IplImage結構(來自OpenCV庫)(我的函數的結果),何時調用我的包裝?不知道這個問題是否可以理解...
非常感謝您的幫助。 在這個問題上回顧3天...
謝謝您的回答。 – PetersLast 2013-04-10 14:03:32
所以我需要添加一種System :: String^myVar作爲私有變量?又如何將數據從Std :: string傳遞給System :: String? – PetersLast 2013-04-10 14:05:14
作爲參數。 std:string作爲函數調用的局部變量。您的託管包裝類使用者無法識別本機std:字符串。 – 2013-04-10 17:39:15