C++ についてはよくわかりませんが、.NET で C++ コードを動作させる必要があります。DLLImport を試してみましたが、失敗しました。そこで、C++/CLI を使って一種のラッパーを作成しようとしました。
しかし、すべてを理解できるかどうかはわかりません...
これは、エクスポートしたい関数 (MyFunction) を含む基本的な C++ H ファイルです。
extern "C"
{
__declspec(dllexport) IplImage* MyFunction(IplImage *src, std::string* name, OneEnumerationType myEnum, bool myBool, float myFloat);
}
これは Wrapper 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);
}
これはラッパーの 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;
私は、System::String を使用する方が良いことを見てきました。私はこの方法を試しますが、最初の関数は std::string を使用しています...ところで、なぜ変更する方が良いのですか?
2) MyFunction IplImage の結果を取得するにはどうすればよいですか? プライベートメンバーとgetを介して、おそらく初期化する方法がわかりません...
3) トリッキーな質問。CLI が (OpenCV ライブラリから) IplImage 構造を取得する (関数の結果) を IplImage .NET 構造内に配置することは可能ですか? 質問が理解できるかどうかわからない...
どうもありがとうございました。この問題で3日間振り返る...