私はDLLによってエクスポートしたC ++でこのコードを持っています:
typedef struct {
unsigned short major;
unsigned short minor;
} Version;
EXPORTED_FUNC Result Init(Version *version, char *file);
extern "C" Result Init(Version *version, char *file)
{
if (file) {
if (!GFile.init(string(file))) {
return INVALID_PARAMETER;
}
if (version) {
version->major = VERSION_MAJOR1;
version->minor = VERSION_MAJOR2;
}
return OK;
}
私はC#からdllを呼び出しています。これは私がそこに書いたものです:
internal struct Version
{
ushort major { set; get; }
ushort minor { set; get; }
}
[DllImport("mydll.dll", CallingConvention=CallingConvention.Cdecl)]
static extern Result Init(ref Version versionInfo, [MarshalAs`(UnmanagedType.LPStr)] string FilePath);
これは Init の呼び出しです。
string filePath = Application.StartupPath + "\\ABC.ini";
Version version = new Version();
result = _mydllWrapper.Init(ref version, filePath);
上記のすべてのコードについて、c# アプリケーションを実行しているときに、x64 マシンで次の例外が発生することがあります。
Unable to load DLL mydll.dll : invalid access to memory location (Exception from HRESULT.0x800703E6)
コンパイルからセキュリティ フラグを削除せずにこのコードを修正するにはどうすればよいですか? 修正のためのコードサンプルは本当に歓迎です!
ありがとう!