私は、C ++ APIでいくつかの関数を呼び出す小さなC#アプリを書いています。DLLにC++コードを組み込み、C#コードはDllImportを使用してAPIを呼び出します。(私はC ++ DLLに.DEFファイルを使用しているので、extern "C"は必要ありません。)
これまでのところ、APIには1つの関数がありますが、現在はまったく何もしていません。
bool Foo()
{
return false;
}
C#では、次のものがあります。
public class FooAPI
{
[DllImport("Foo.dll")]
public static extern bool Foo();
}
...
bool b = FooAPI.Foo();
if (!b)
{
// Throw an exception
}
私の問題は、何らかの理由で、bが常にTRUEと評価されていることです。if(!b)にブレークポイントがあり、デバッガーはそれを「true」として報告します。これは、C++関数が返すものとは関係ありません。
C#ブール値はC ++ブール値と同じですか?そうでない場合でも、戻り値が「true」であるとどのように検出されるかはわかりません:)
誰かがこの奇妙な矛盾を手伝ってくれる?
前もって感謝します!