質問

私はC ++でそれほど良くない だが、.. たとえば、この

を持っています
#define GETSomthing_API  __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
.

と私がこのような

のようにインポートしたい方法
GETSomthing_API  int GetSomthing(const char* szConfigPath, char *A, int B)
.

どのように私はこれをC#から呼び出すことができますか?

私の問題はC ++側のパラメータタイプ(const char *)であると思います。char char *

ありがとう、

役に立ちましたか?

解決

C#

または

C#

からのC ++関数の呼び出し

使用:[DLLIMPORT( "xxx.dll")] xxx.dllはc ++

によってコンパイルされています

この助けを願っています。

他のヒント

C#からネイティブコードを呼び出す方法はいくつかあります。最も簡単なことは、おそらくP/Invokeを使用することです。 あなたの関数は次のようなものです:

extern "C" int nGetSomeThing(void);
.

とyourdllname.dllファイルにコンパイルされている場合は、C#コードから次のようにして、P / Invokeを使用してアンマネージコードに直接呼び出します。

public static class interop
{
    [DllImport("YourDllName.dll")]
    static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function
.

参照:> http://msdn.microsoft。COM / EN-US / Library / AA288468%28VS.71%29.ASPX

複雑な署名を持つ関数がたくさんある場合は、おそらくC ++ / CLIの相互コップ層に行く必要があります。 参照: http.://www.codeproject.com/articles/19354/quick-cli-learn-c-cli-inless-than-10-10minutes

__cplusplusチェックを追加してうまくいった!

#ifdef __cplusplus
.

extern "c" {

Endif

GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
.

ifdef __cplusplus

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top