こんにちは、呼び出す必要のある関数を含む DLL があります。署名は次のとおりです。
const char* callMethod(const char* key, const char* inParams);
Ruby を使用すると、すべて正常に動作します。
attach_function :callMethod, [:string, :string], :string
C++ または C# を使用すると、スタック オーバーフローが発生します!?
C#:
[DllImport("DeviceHub.dll", CallingConvention = CallingConvention.Cdecl)]
private unsafe static extern IntPtr callMethod(
[MarshalAs(UnmanagedType.LPArray)] byte[] key,
[MarshalAs(UnmanagedType.LPArray)] byte[] inParams
);
System.Text.UTF8Encoding encoding = new UTF8Encoding();
IntPtr p = callMethod(encoding.GetBytes(key), encoding.GetBytes(args)); // <- stack overflow here
c++:
extern "C"
{
typedef DllImport const char* ( *pICFUNC) (const char*, const char*);
}
HINSTANCE hGetProcIDDLL = LoadLibrary(TEXT("C:\\JOAO\\Temp\\testedll\\Debug\\DeviceHub.dll"));
FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"callMethod");* pICFUNC callMethod;
callMethod = (pICFUNC) lpfnGetProcessID;
const char * ptr = callMethod("c", "{}");
関数呼び出しのさまざまなバリエーションを試しました: WINAPI、PASCAL、stdcall、fastcall... 何も機能しません。
DLL は私が作成したものではなく、私が制御することはできません。
誰でも私に何か提案を手伝ってもらえますか!?