1

Windows Mobile 6.5 用の C# アプリケーションに C DLL を含めようとしましたが、正しい動作を得ることができませんでした。

私が使用しようとしている機能は次のとおりです(ヘッダーファイルに記載されているとおり):

extern "C" __declspec (dllimport) BOOL Init (wchar_t *data);

data は入出力パラメーターです。

この関数を含めるための私のコードは次のとおりです。

[DllImport(@"ICCardReader.dll")]
public static extern int Init([MarshalAs(UnmanagedType.LPWStr)] ref string data);

これは、実行時に呼び出されたときにコンパイラによって受け入れられますが、この関数の動作は正しくありません (結果は常に false です)。

だから私の質問は、明らかな「私は何か間違ったことをしましたか?」のほかに、次のとおりです: ポインターが含まれている場合に、C# アプリケーションに C DLL を含める方法は?

PSI は、サードパーティ製アプリケーションによって DLL の正確性を検証できました

[編集]

ユーザーの提案のおかげで、Dllimport を次のように変更しました。

public static extern int Init(StringBuilder data);
4

1 に答える 1

0

BOOL が何として定義されているかを確認したい場合があります。これは、C に組み込みの bool がないため、他の何かの typedef である可能性があると思われます。

DllImport を次のように変更してみる価値があるかもしれません

[DllImport(@"ICCardReader.dll")]
public static extern int Init(StringBuilder data);

戻ってくる整数値があるかどうかを確認します。

[編集] 入力を StringBuilder に変更してみてください

于 2012-10-30T13:51:44.893 に答える