2016-11-02 13 views
-3

私はC言語で自分のプログラムにCライブラリを使いたいと思っています。
このライブラリには、カメラを制御するcという機能を持つヘッダファイルが含まれています。C/C++からC#へのDllImport宣言を定義する方法

Cにおけるこれらの機能のいくつかを、Fg_Struct そして最後に、このtypedefでは、だから今

Typedef struct Fg_Struct_s Fg_Structとして宣言されているが、私はヘッダファイルからこれらの関数を使用したいと呼ばれるのtypedefで指し*fg と呼ばれるポインタを使用私のC#プログラムで。 私は新しいクラスを作成して、これらの関数をDLLvarary からpinvoker-addon経由でインポートしました。
pinvoker-addonは、これらの関数の新しい宣言を作成しました。 (非管理から管理)。
これらの新しい宣言された関数のほとんどは、Visual Studio

Fg_Struct [] Fg

と呼ばれる変数は、エラーのためのC#のプログラムの開発に「Fg_Structが定義されていない」私を示しています。例えば


、iがCでエラーdiscription

を呼び出すためFg_getLastErrorDiscripstion関数を使用することができます。

fgrab_struct.h

typedef struct Fg_Struct_s Fg_Struct; 

fgrab-prototyp.h

include "struct.h" 
const char *const Fg_getLastErrorDescription(Fg_Struct *Fg); 

Fg_Struct *fg = NULL; 
fg = Fg_Init(DLLNAME, boardNr) 
fprintf(stderr, "error in Fg_Init: %s\n", Fg_getLastErrorDescription(NULL)); 

main.cppには今、私はC#でそれを使用したい:

CAM_SISO.cs

[DllImport("fglib5.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)] 
public extern static IntPtr Fg_getLastErrorDescription(Fg_Struct [] Fg);` 

私はC#プログラミングで本当に新しいですし、すべてで調査私は正解を見つけられませんでした.Fg_Struct [] Fgを宣言または定義してC#でFg_getLastErrorDiscription関数を使用する方法を教えてください。

+0

彼のDLLはプレーン関数と標準のレイアウトタイプをエクスポートします。これは、 'declspec(dllexport)'クラスにアクセスする方法を尋ねることの重複ではありません。 –

+0

私は彼の質問が構造 "Fg_Struct [] Fg"を定義するために特定されていると思いますので、重複しないかもしれません – Naidu

答えて

0

あなたのコードは、これまで実際にはCのヘッダファイルがFg_Struct*を持っているところはどこでも、あなたがIntPtrを使用することができ、DLL内の他の関数に渡し、Fg_Structの内側に見えない場合。

それに加えて、Cソースコードは、配列、参照渡しパラメータ、出力パラメータのいずれかのポインタを使用するため、自動p/invokeジェネレータは推測する必要があります。それらが属していない配列

+0

ありがとう、それは動作します –

関連する問題