VC写的dll的定义
extern "C"_declspec(dllexport) unsigned char* GenAuthenNO(unsigned char *MachineNO, unsigned char *AuthenNO)
Delphi调用时的申明
SQRTPROC = function(MachineNO: array of BYTE; var pBuff: PByte): pbyte;stdcall;
程序运行过程中,如果pBuff赋值了,就不能运行,如果pBuff没有赋值了,就可以运行,
有谁知道怎么回事啊?
extern "C"_declspec(dllexport) unsigned char* GenAuthenNO(unsigned char *MachineNO, unsigned char *AuthenNO)
Delphi调用时的申明
SQRTPROC = function(MachineNO: array of BYTE; var pBuff: PByte): pbyte;stdcall;
程序运行过程中,如果pBuff赋值了,就不能运行,如果pBuff没有赋值了,就可以运行,
有谁知道怎么回事啊?
指针对指针。
SQRTPROC = function(MachineNO: PChar; pBuff: PByte): pbyte;stdcall;
-------------
var
return: PByte;
begin
return := GenAuthenNO(PByte(PChar('11111')), PByte(PChar('22222')));
showmessage(pchar(return));
end;
看声明应该默认的是cdecl方式
iAuthenNO: array[0..7] of BYTE;
MachineNO: array[0..7] of BYTE;
pTemp: pByte;
然后:
pByte := @iAuthenNO;
所以,已经是申请了空间
pByte得到该串数字,可是就是不成功,不知道为什么
extern "C"_declspec(dllexport) int GenAuthenNO(unsigned char *MachineNO, unsigned char *AuthenNO)在delphi 6中定义:
AUTHENROC = function(MachineNO: array of BYTE; AuthenNO: array of BYTE): Integer;stdcall;则只有MachineNO可以访问和修改,AuthenNO只要一修改,就出错了!非常奇怪,我可以保证
MachineNO和AuthenNO是在调用GenAuthenNO函数前进行相同的初始化操作。哪位高手知道啊
或者:
type
TArray = array [0..7]of byte;
PArray = ^TArray;
var
MachineNO,AuthenNO:PArray;使用时 New(MachineNo);动态申请空间另确认一下是否是stdcall方式
MachineNO, AuthenNO: array[0..7] of Char;//of Byte也行调用
GenAuthenNO(@MachineNO[0], @AuthenNO[0])
2、当然使用stdcall了,怎么会使用cdecl呢?
否则Delphi用cdecl