ストレート C Win32 アプリケーションの一部として使用する必要がある C# ライブラリがあります。C# .NET オブジェクトを処理できるC++ / CLIでラッパーを作成しようとしています。唯一の問題は、プロジェクト全体を C++ でコンパイルできず、C のままにしなければならないことです。
この問題を解決するために、C# オブジェクトのインスタンスを C コードに不透明に渡して、ラッパー ライブラリ呼び出しで渡して使用できるようにしたいと考えていますが、その方法がわかりません。たとえば、次のようなことをしたいと思います。
C++ / CLI ラッパー:
void * ReturnObject(char *name){
return (void *)gcnew MyObject(gcnew String(name));
}
void UseObject (void *object){
MyObject ^handle = (MyObject ^)object;
object -> use();
}
C++ スタティック ライブラリを使用したネイティブ C コード:
int main (char **argv){
void *obj = ReturnObject("foobar");
UseObject(obj);
}
したがって、C コードは の内容を気にすることはobj
なく、 CLR の type についても認識しませんが、MyObject
オブジェクトの永続性を維持するためにデータを渡すだけです。これはポインターを使用して行う必要があると考えましvoid
たが、C++ コンパイラーはキャストを実行したくありません。管理されたメモリと管理されていないメモリの違いによるものなのか、それとも正しく実行していないだけなのかはわかりませんが、助けていただければ幸いです。
要約すると、C++ / CLI ラッパー ライブラリで .net オブジェクトをインスタンス化し、それらのオブジェクトをストレートな C コードで保持して、まだ記述していない他の C++ / CLI ライブラリ呼び出しで再び使用できるようにしようとしています。
助言がありますか?