C#でアンマネージDLLのC関数を使用しようとしています。
関数のシグネチャは次のとおりです。
const char* CDECL get_lame_version ( void );
この方法で関数をインポートします。
[DllImport("libmp3lame.dll")]
static extern string get_lame_version();
この関数を呼び出したが、呼び出しの直前に中断した場合、F5キーを押すと、AccessViolationExceptionがスローされます。
まず、呼び出しの直前に実行が中断されます。
次にF5を押すと、例外があります。
代わりに、呼び出し後に実行が中断した場合、例外はスローされません。
だから私の質問は:私のコードに何か問題がありますか?そうでない場合、何が起こっていますか?
編集
get_lame_versionの定義は次のとおりです。
/*! Get the LAME version string. */
/*!
\param void
\return a pointer to a string which describes the version of LAME.
*/
const char *
get_lame_version(void)
{ /* primary to write screen reports */
/* Here we can also add informations about compile time configurations */
#if LAME_ALPHA_VERSION
static /*@observer@ */ const char *const str =
STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " "
"(alpha " STR(LAME_PATCH_VERSION) ", " __DATE__ " " __TIME__ ")";
#elif LAME_BETA_VERSION
static /*@observer@ */ const char *const str =
STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " "
"(beta " STR(LAME_PATCH_VERSION) ", " __DATE__ ")";
#elif LAME_RELEASE_VERSION && (LAME_PATCH_VERSION > 0)
static /*@observer@ */ const char *const str =
STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) "." STR(LAME_PATCH_VERSION);
#else
static /*@observer@ */ const char *const str =
STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION);
#endif
return str;
}