关于vc如何动态调用CB编写的Dll问题

tonyzhao 2003-08-25 03:46:43
我用CB编写了一个DLL,其中声名了一个带参数的函数,功能使创建一个Form并将输入的参数显示在Form的文本框中。我在CB中动态调用此DLL没有任何错误,但在VC中调用时,弹出Form并显示参数均正常,但在关闭Form时VC提示DEBUG错误!不知道什么原因?
CB代码如下:
#include "frm.h"

extern "C" void __declspec(dllexport) _stdcall ShowWin(char str1[10],char str2[10],char str3[10]);

void _stdcall ShowWin(char str1[10],char str2[10],char str3[10])
{
Form1 = new TForm1(NULL)
Form1->Edit1->Text = str1;
Form1->Edit2->Text = str2;
Form1->Edit3->Text = str3;
Form1->ShowModal();
delete Form1;
}

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}

VC代码如下:
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();

void (*ShowWin)(char str1[10],char str2[10],char str3[10]);
HINSTANCE hInst;
char str1[10],str2[10],str3[10];

strcpy(str1,"k189");
strcpy(str2,"11:40");
strcpy(str3,"3");
hInst = LoadLibrary("DLL.DLL");
(FARPROC &)ShowWin = GetProcAddress(hInst,"ShowWin");
ShowWin(str1,str2,str3);
FreeLibrary(hInst);


}
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjqyb 2003-08-26
  • 打赏
  • 举报
回复
typedef void ( WINAPI *fp)(char str1[10],char str2[10],char str3[10]);
HINSTANCE hInst;
char str1[10],str2[10],str3[10];

strcpy(str1,"k189");
strcpy(str2,"11:40");
strcpy(str3,"3");
hInst = LoadLibrary("DLL.DLL");
ShowWin = (fp)GetProcAddress(hInst,"ShowWin");
ShowWin(str1,str2,str3);
FreeLibrary(hInst);
zjqyb 2003-08-26
  • 打赏
  • 举报
回复
cb中你没有静态编译吧
zjqyb 2003-08-26
  • 打赏
  • 举报
回复
extern "C" void __declspec(dllexport) ShowWin(char str1[10],char str2[10],char str3[10]);
(vc中不能有__stdcall,和cb是反的)
Behard 2003-08-26
  • 打赏
  • 举报
回复
应该是两个编译器的默认调用 Dll 方式不一样引起的错误
在 VC 中改为
void (__stdcall *ShowWin)(char str1[10],char str2[10],char str3[10]);
即可
自己下载正式版2.3,二进制下自己破解。参考偷梁换柱破解SkinMagic_百度文库中的文档,思想是PostMessageA替换MessageBoxA。下面是帖子的具体内容 不知道有多少像本人一样一直热爱着vc的人存在,应该很多吧.虽然CB也用的是c++的语法,但是由于是个人偏激吧,不太喜欢,所以就一直忍受着做界面的痛苦.用Vc写程序的都知道,MFC做界面是多么痛苦的事情,动不动就要继承,封装....十分的郁闷。以后前段时间让我遇到了SkinMagicToolkit,才知道,世界上既然还有那么可爱的软件存在(帮作者做一下广告先),简单的调用几句代码,就可以改变界面皮肤~换皮肤也很简单。真是个好东西~.好了,不说多废话了,开始。 我下载的是SkinMagicToolkit2.21.下载回来以后,发现按照例子调用以后,可以是可以改变皮肤,但是都会在程序界面显示前跳出一个对话框,显示内容是:ThisapplicationusestrialversionofSkinMagicToolkit.Youcanregisterathttp://www.appspeed.com 真难看,破解!把这个难看的对话框去掉。先检查壳。结果是没有~好~用W32dsm8.93中文版.先进行静态分析.SkinMagic里所有的函数其实就是在SkinMagicTrial.dll这里面了.用W32dsm8.93打开SkinMagicTrial.dll。然后"参考"->"串式参考".找到对话框信息.一直往下翻.看见这个信息"Thisapplicationusestrialversion",双击。这个时候,程序代码来到了:100061816878BC0510push1005BC78.字符信息就是在这里入栈的.往下看几行,把MessageBoxA的4个参数都入栈了以后,再下两行就是MessageBoxA函数的调用处了,在:10006192FF150c040510,这里就是调用MessageBoxA的地方.好的,马上用最简单的办法,把这里的入栈的4个参数都用nop给替换掉.我用的是Hiewv6.81。不一会,就把这4个push*****替换成了nop。马上运行已经写好的程序,因为程序是调用SkinMagicTrial.dll的,所以不用改任何程序的代码,就可以运行了。结果发现,跳出错误对话筐,说程序初始化错误,就退出了程序.....真郁闷....难道程序在其他的地方检查了Eax寄存器?Eax寄存器是用来保存每个函数调用完以后的返回值的.算了,我也懒得麻烦去做其他的事情了,要的就是爆破.仔细想一下,有什么函数也是调用4个参数的,而且要SkinMagicTrial.dll已经倒入的。有了! PostMessageA,马上看一下PostMessageA在SkinMagicTrial.dll中的地址."菜单"->"函数"->"输入",然后找到PostMessageA.双击,看见了PostMessageA的调用地址: 10023FF1FF15C4030510.好的,等一下就可以在:10006192FF150C040510,把FF150C040510替换成为FF15C4030510就可以了.因为PostMessageA也有返回值.呵呵。破解成功。这样,运行的时候再也不会跳出烦恼的对话框了.
一款用于共享软件加密的动态链接库文件,包含了获取硬盘物理序列号及BlowFish、MD5、SHA512、RIPEMD160、Secret16、MD5FileCheck、CRCFileCheck等多种强大加密算法,可以非常方便的用于软件的各类加密需求。支持VC/VB/BCB/Delphi等各类Windows平台下的开发工具,软件同时提供详细的函数定义说明、示例及各类开发工具使用的源代码。 软件功能: (1)可用于获取硬盘序列号(IDE/SCSI),支持Win9x/Me/NT/2000/XP。 (2)内置BlowFish、MD5、SHA512、RIPEMD160、Secret16、MD5FileCheck、 CRCFileCheck等多种强大加密算法来对软件进行加密保护。 (3)支持Window平台下的各类开发工具,如VC/VB/BCB/Delphi/PB/VFP等。 (4)可以非常方便的同时使用多种加密算法来对软件进行加密保护。 打包文件说明: Reg.dll-------------------加密算法动态链接库文件。 Reg.h---------------------在 VC(C/C++) 和 BCB 开发环境下的头文件。 Reg.lib-------------------在 VC(MFC) 开发环境下的 Library 文件。 Reg.bas-------------------在 VB 开发环境下的 Module 文件。 Readme.txt----------------纯文本格式说明文件。 Help.chm------------------函数接口详细定义说明文件。 MFC_TestEncryDll.zip------MFC调用Reg.dll进行加密示例。 VB6_TestEncryDll.zip------VB6调用Reg.dll进行加密示例。 CB5_TestEncryDll.zip------BCB5调用Reg.dll进行加密示例。 Delphi_TestEncryDll.zip---Delphi调用Reg.dll进行加密示例。 函数详细说明请参见Help.chm中具体函数说明部分及相关示例代码。

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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