ac# アプリケーションで ac dll を使用すると問題が発生します。エラーを発生させる関数は、dll のヘッダー ファイルで次のように定義されています。
int __stdcall DDC_CreateFilePropertyString (DDCFileHandle file,
const char *property,
const char *value);
dll にアクセスするクラスに次のコードを追加しました。
[DllImport("nilibddc.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
private static extern int DDC_CreateFilePropertyString(IntPtr file,
[MarshalAs(UnmanagedType.LPStr)]string property,
[MarshalAs(UnmanagedType.LPStr)]string value);
Type DDCFileHandle は、ヘッダー ファイルで次のように定義されます。
typedef struct _DDCFile DDCFile;
typedef DDCFile* DDCFileHandle;
ヘッダー ファイルに _DDCFile 構造体に関する追加情報はありません (使用しているライブラリの他のファイルはありません)。
関数 DDC_CreateFilePropertyString() を呼び出す前に、次の関数を呼び出してファイルを作成し、ファイル ハンドルを取得します。
[DllImport("nilibddc.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Ansi]
private static extern int DDC_CreateFile(char[] filePath,
char[] fileType,
char[] name,
char[] description,
char[] title,
char[] author,
ref IntPtr file);
ヘッダー ファイル内の定義は次のようになります。
int __stdcall DDC_CreateFile (const char *filePath,
const char *fileType,
const char *name,
const char *description,
const char *title,
const char *author,
DDCFileHandle *file);
今では常に、関数 DDC_CreateFilePropertyString を呼び出すと、間違ったパラメーターが渡されたことを示すエラーが返されます。私は何を間違っていますか?私が使用しているライブラリは、National Instruments の TDMS C API です。
ご協力いただきありがとうございます。