动态引用DLL的内存访问错误

CityHost 2003-02-22 10:13:19
extern "C" __declspec(dllexport) BOOL __stdcall EncryptFiles(PCHAR,PCHAR,PCHAR);
extern "C" __declspec(dllexport) BOOL __stdcall DecryptFiles(PCHAR,PCHAR,PCHAR);
extern "C" __declspec(dllexport) PCHAR __stdcall EncryptData(PCHAR,PCHAR);
extern "C" __declspec(dllexport) PCHAR __stdcall DecryptData(PCHAR,PCHAR);
extern "C" __declspec(dllexport) AnsiString __stdcall UserGUID(void);
上面是函数库里的原型声明

下面是在工程中的用法
HINSTANCE handle;
FARPROC lpFarProcEncryptFiles,lpFarProcDecryptFiles,lpFarProcEncryptData,lpFarProcDecryptData,lpFarProcUserGUID;
BOOL __stdcall (*lpEncryptFile)(PCHAR,PCHAR,PCHAR);
BOOL __stdcall (*lpDecryptFile)(PCHAR,PCHAR,PCHAR);
PCHAR __stdcall (*lpEncryptData)(PCHAR,PCHAR);
PCHAR __stdcall (*lpDecryptData)(PCHAR,PCHAR);
AnsiString __stdcall (*lpProcUserGUID)(void);

handle = LoadLibrary("Users.DLL");

lpFarProcEncryptFiles=GetProcAddress(handle,"EncryptFiles");
lpFarProcDecryptFiles=GetProcAddress(handle,"DecryptFiles");
lpFarProcEncryptData=GetProcAddress(handle,"EncryptData");
lpFarProcDecryptData=GetProcAddress(handle,"DecryptData");
lpFarProcUserGUID=GetProcAddress(handle,"UserGUID");

lpEncryptFile=(BOOL(__stdcall*)(PCHAR,PCHAR,PCHAR))lpFarProcEncryptFiles;
lpDecryptFile=(BOOL(__stdcall*)(PCHAR,PCHAR,PCHAR))lpFarProcDecryptFiles;
lpEncryptData=(PCHAR(__stdcall*)(PCHAR,PCHAR))lpFarProcEncryptData;
lpDecryptData=(PCHAR(__stdcall*)(PCHAR,PCHAR))lpFarProcDecryptData;
lpProcUserGUID=(AnsiString(__stdcall*)(void))lpFarProcUserGUID;


lpEncryptFile("e.txt","D.txt","Password");
lpDecryptFile("d.txt","es.txt","Password");

在下面出现内存访问错误,为什么?怎样解决,怎样得到函数的返回值
AnsiString Des=lpEncryptData("Source","Password");
AnsiString Src=lpDecryptData(Des.c_str(),"Password");
AnsiString tu=Src;

FreeLibrary(handle);
...全文
17 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingfengchen 2003-08-07
  • 打赏
  • 举报
回复
mark
Behard 2003-02-24
  • 打赏
  • 举报
回复
哦,没有仔细看
我觉得应该是 Dll 中的函数返回指针不是当前进程的或者自动分配引起的
你可以这样做

extern "C" .......
{
static char strRet[100];
.....//strcpy ect.
return strRet;
}
Behard 2003-02-24
  • 打赏
  • 举报
回复
哦,没有仔细看
我觉得应该是 Dll 中的函数返回指针不是当前进程的或者自动分配引起的
你可以这样做

extern "C" .......
{
static char strRet[100];
.....//strcpy ect.
return tsrRet;
}
CityHost 2003-02-24
  • 打赏
  • 举报
回复
涉及到函数返回值就会发生内存访问错误
Behard 2003-02-24
  • 打赏
  • 举报
回复
哪里出错了
CityHost 2003-02-23
  • 打赏
  • 举报
回复
代码没有问题,在标准工程里以函数的方式测试过,原来就是一个单独的程序。
invalid 2003-02-22
  • 打赏
  • 举报
回复
把dll的代码加入到普通工程中,测试通过后,再加入到dll中。
CityHost 2003-02-22
  • 打赏
  • 举报
回复
大家给看看

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧