私はC++ APIでいくつかの関数を呼び出すC#アプリケーションを少し書いています。私はC++コードをDLLに組み込み、C#コードはDllImportを使ってAPIを呼び出します。でC#のC++:C++関数(DLL内)がfalseを返すが、C#はそれが本当だと思う!
bool Foo()
{
return false;
}
:(。私は、私はにextern「C」を必要としないC++ DLLの.defファイルを使用しています)
をこれまでのところ、APIは現在、絶対に何もしない1つの機能を有しています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)にブレークポイントがあり、デバッガはC++関数が返すものとは無関係に 'true'と報告します。
C#boolはC++ boolと同じですか?たとえこれが当てはまらないとしても、戻り値が「真」であることをどうして得られるかはまだ分かりません:)
この奇妙な矛盾は誰でも助けてくれますか?
ありがとうございます!
あなたは真のC++関数の戻り値を持っている場合は、あなたのC#メソッドは戻り値として何を参照するのでしょうか? –
FooAPI.Foo()メソッドを使用するコードを教えてください。 – Kevin
C++関数をextern "C"と宣言してはいけませんか? –