Function fnbReadEnregister(RecCount:integer;var OutData:Pchar):Integer;stdcall; external 'PkeyDll.dll';
vc调用的代码:
char rs[50];
LPVOID * temp;
int ors = -1000;
HMODULE m_hDll = NULL;
typedef int (__stdcall *function)(int ,char *);
function RetF;
m_hDll = LoadLibrary("PKeyDLL.dll");
if(m_hDll != NULL)
{
RetF=(function)GetProcAddress(m_hDll,"fnbReadEnregister");
ors = RetF(2,(char *)rs); // 这里rs取到值后是乱码,就是这个问题
}
else
{
strcpy(rs,"<Exception>cant load PKeyDLL.dll</Exception>");
}
FreeLibrary(m_hDll);
return env->NewStringUTF(rs);
4 个解决方案
#1
高手们都到哪里去了啊
#2
把delphi的一个dll里面函数改成这样试试:
Function fnbReadEnregister(RecCount:integer;OutData:Pchar):Integer;stdcall; external 'PkeyDll.dll';
Function fnbReadEnregister(RecCount:integer;OutData:Pchar):Integer;stdcall; external 'PkeyDll.dll';
#3
OutData:Pchar
与char 的类型是否一样。
你可以看一下OutData:Pchar在内存中的存放格式。 比如 一个串“abcd" 在内存中是 a0b0c0d0那么就把typedef int (__stdcall *function)(int ,wchar_t *);
并且最好计算一下RecCount:integer类型的长度。就是C中的SIZEOF(RecCount:integer)的意思要保护第一个参数所站用的内存大小与RecCount:integer相同
与char 的类型是否一样。
你可以看一下OutData:Pchar在内存中的存放格式。 比如 一个串“abcd" 在内存中是 a0b0c0d0那么就把typedef int (__stdcall *function)(int ,wchar_t *);
并且最好计算一下RecCount:integer类型的长度。就是C中的SIZEOF(RecCount:integer)的意思要保护第一个参数所站用的内存大小与RecCount:integer相同
#4
char rs[50]; 改
char *rs=(char*)malloc(50);
strcpy(rs,"abcde");
ors = RetF(2,rs); // 这样在试一下。
char *rs=(char*)malloc(50);
strcpy(rs,"abcde");
ors = RetF(2,rs); // 这样在试一下。
#1
高手们都到哪里去了啊
#2
把delphi的一个dll里面函数改成这样试试:
Function fnbReadEnregister(RecCount:integer;OutData:Pchar):Integer;stdcall; external 'PkeyDll.dll';
Function fnbReadEnregister(RecCount:integer;OutData:Pchar):Integer;stdcall; external 'PkeyDll.dll';
#3
OutData:Pchar
与char 的类型是否一样。
你可以看一下OutData:Pchar在内存中的存放格式。 比如 一个串“abcd" 在内存中是 a0b0c0d0那么就把typedef int (__stdcall *function)(int ,wchar_t *);
并且最好计算一下RecCount:integer类型的长度。就是C中的SIZEOF(RecCount:integer)的意思要保护第一个参数所站用的内存大小与RecCount:integer相同
与char 的类型是否一样。
你可以看一下OutData:Pchar在内存中的存放格式。 比如 一个串“abcd" 在内存中是 a0b0c0d0那么就把typedef int (__stdcall *function)(int ,wchar_t *);
并且最好计算一下RecCount:integer类型的长度。就是C中的SIZEOF(RecCount:integer)的意思要保护第一个参数所站用的内存大小与RecCount:integer相同
#4
char rs[50]; 改
char *rs=(char*)malloc(50);
strcpy(rs,"abcde");
ors = RetF(2,rs); // 这样在试一下。
char *rs=(char*)malloc(50);
strcpy(rs,"abcde");
ors = RetF(2,rs); // 这样在试一下。