嗨,我有一个DLL,我需要调用一个函数.签名是:
const char* callMethod(const char* key, const char* inParams);
Run Code Online (Sandbox Code Playgroud)
如果我使用ruby一切正常:
attach_function :callMethod, [:string, :string], :string
Run Code Online (Sandbox Code Playgroud)
如果我使用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
Run Code Online (Sandbox Code Playgroud)
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", "{}");
Run Code Online (Sandbox Code Playgroud)
我尝试了很多函数调用的变体:WINAPI,PASCAL,stdcall,fastcall,......没什么用.
DLL并非由我制作,我无法控制它.
谁能帮我提出任何建议!?
m12*_*m12 -5
堆栈溢出异常是微软语言中的一个错误,用于防止无限递归,并防止不兼容的程序相互交互。如果您的 dll 方法使用递归,请尝试使用迭代重写它。否则,就按照欧维说的做,尝试用字符串。如果仍然不起作用,请 Google 寻找兼容类型。在不知道实际方法的情况下我只能说这么多。