• 締切済み

Cで自作したDLLをへC#から文字配列を渡したい

CでDLLを自作したのですが、その引数にchar**型があるのですが、C#から使用するときにどの型の変数を渡せばいいのかわかりません。 色々と調べていくつか同じような事例があったのですが、うまくいきません。 Cで作ったDLLは __declspec(dllexport) int DetectComPorts(LPWORD ComPortTable, int ComPortMax, char **ComPortDesc) です。この中で「char **ComPortDesc」が問題です。 Cで書いたプログラムからはこのDLLが使用できることを確認しています。 Cの場合はchar**型の適当な変数を作ってmallocでメモリ確保してこの関数に渡して実行するとちゃんとアドレスに目的の文字列が格納されて帰ってきます。 よろしくお願いします

みんなの回答

回答No.2

IntPtrになるかと思いますが、fixedキーワードを使用したほうが手っ取り早いかもしれませんね。 引数を易しくした関数を後もう一つDLLからエクスポートできればそれに越したことはないのですが。 http://limbioliong.wordpress.com/2012/04/17/how-to-implement-pointer-to-pointer-in-c-without-using-unsafe-code/

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

__stdcall を使う。 __cdecl は c言語同士で使用すると時に使用可能です。 言語の壁を越えて、DLL呼び出しをする場合には、__stdcallが使えます。 __stdcallと比べて、__cdeclは、c言語ならではの呼び出し方法を拡張されています。 __stdcallを使うと一部制約を受けますが、それは__stdcallのルールです。 __stdcall http://msdn.microsoft.com/en-us/library/zxk0tw93(VS.71).aspx __cdecl http://msdn.microsoft.com/en-us/library/zkwh89ks(VS.71).aspx

関連するQ&A