虽然是 Java 中的问题,但是这个跨语言调用,尤其是 C/C++ 方面的,应该还是救助 C++ 吧友好像更好,所以来 C++ 吧发个救助贴,希望有经验的吧友,指点一二,提前谢过!
问题是这样的,通过 JNA 调用 DLL 中的函数,其他函数调用倒是挺正常的,但是"_st_wsx_TvWallCallMode@16"这个函数名该如何调用,在 Java 中编译就没办法通过。
头文件中方法是这样定义的:
ST_WSX_API int _stdcall st_wsx_TvWallCallMode(char *pDecPuid, char *pDecServerIp, int nDecServerPort, int nModelID);
直接用 st_wsx_TvWallCallMode 函数名提示无法找到这个函数,于是通过 Depends 查看,发现函数名是 "_st_wsx_TvWallCallMode@16"。大致了解了一下,应该说的是参数的大小,_stdcall 调用规约导致的,由于楼主只有一丢丢的 C 语言基础,所以不太懂这些知识。那么在没办法修改 DLL的情况下, JNA 该如何调用这样的方法呢,参数又该如何传递?
问题是这样的,通过 JNA 调用 DLL 中的函数,其他函数调用倒是挺正常的,但是"_st_wsx_TvWallCallMode@16"这个函数名该如何调用,在 Java 中编译就没办法通过。
头文件中方法是这样定义的:
ST_WSX_API int _stdcall st_wsx_TvWallCallMode(char *pDecPuid, char *pDecServerIp, int nDecServerPort, int nModelID);
直接用 st_wsx_TvWallCallMode 函数名提示无法找到这个函数,于是通过 Depends 查看,发现函数名是 "_st_wsx_TvWallCallMode@16"。大致了解了一下,应该说的是参数的大小,_stdcall 调用规约导致的,由于楼主只有一丢丢的 C 语言基础,所以不太懂这些知识。那么在没办法修改 DLL的情况下, JNA 该如何调用这样的方法呢,参数又该如何传递?