嗨,我有一个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没有被我制作,我没有控制.
任何人都可以帮我任何建议!
解决方法
确保标题中的声明包含在一个extern“C”块中:
extern "C" { const char* callMethod(const char* key,const char* inParams); }
见http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3
原文地址:https://www.jb51.cc/c/115814.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。