紧急求救!有关DLL调用问题!请兄弟们帮帮忙吧!--(可以继续加分!多少分都无所谓)

Sammo 2003-03-08 04:15:09
天敏公司的VC404卡做的DLL文件竟然在BC++和C++Builder下都无法调用,无论是静态调用还是动态调用!都不行!我给搞得头大了!
我也已经使用BCB的IMPLIB.EXE生成sdk4878.dll的sdk4878.lib文件,然后加入到项目文件中,包含了头文件!编译时总是提示类似这样的错误:
[Linker Error] Unresolved external '__stdcall ViInit(void *)' referenced from E:\C++\TEMP\MAIN.OBJ
然后,我试试动态调用,但总是无法成功调用,就好像没有存在该函数名似的!
卡我已经购买了!但无法进行二次开发!怎么办?!?!?但天敏公司声明是可以在BC++下进行开发的!我如何可以实现在BCB5下调用呢?请各位大侠救命啊!拜托了!谢谢!:)
该开发包下载地址在这里:
http://sammo.51.net/files/sdk.rar
...全文
69 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Sammo 2003-03-08
To aningstar(乘风破浪终有时):
extern "C" __declspec(dllimport) void __stdcall EnableRespondDbClk(DWORD dwCard,BOOL bEnable);
extern "C" __declspec(dllimport) DWORD __stdcall GetDevNum(void);
为什么您定义的EnableRespondDbClk函数就可以,但我试了一试定义GetDevNum函数就不行了!请看看!谢谢!:)
回复
Sammo 2003-03-08
To aningstar(乘风破浪终有时):
真奇怪!我和您一模一样的做了!绝对没有漏半步,但我的就是不行耶!总是提示这句!
请您把您做好的例子发送给我试试看好吗?谢谢!:)
sammochoi@21cn.com
回复
mustang_zr 2003-03-08
这篇文章我觉得说的挺全面的,不过都是E文

http://www.bcbdev.com/articles/vcdll.htm

希望有帮助
回复
aningstar 2003-03-08
忘了说一句,要把dll文件和lib文件都和你的项目文件放在同一个目录下!
回复
aningstar 2003-03-08
对不起,上边的给错了,我在电脑上试了一下,没有问题啊
估计是你忘记导入lib了。


1,你一定要把lib文件导入到你的project中去,方法如下,选择菜单project,选择第一个,就是
add to project,在对话框中下拉选*.lib,将sdk4878.lib加入,然后就可以了

2,下面是我的测试代码,没有问题

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
extern "C" __declspec(dllimport) void __stdcall EnableRespondDbClk(DWORD dwCard,BOOL bEnable);

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD Card=1;
BOOL MyEnable=true;

EnableRespondDbClk(Card,MyEnable);
}
//---------------------------------------------------------------------------
回复
aningstar 2003-03-08
__stdcall 换成__pascal试一下
回复
Sammo 2003-03-08
谢谢 kingfish!非常感谢!:)
结贴了!
好久没有用过BCB,现在我又学到了很多东西了!!!Thanks!:)
回复
kingfish 2003-03-08
如果你用TRect rc;
用:(RECT *)&rc;

或者 RECT rc;
用:&rc;
回复
kingfish 2003-03-08
自带的

你用法有问题
回复
Sammo 2003-03-08
Sorry!这个是已经定义的!不用加的!
我想问的是,我怎么可以把一个Form的RECT变成可以在
BOOL WINAPI StartOverlay(DWORD dwCard,HWND hWnd,RECT *rc);

中使用?谢谢!
回复
Sammo 2003-03-08
把这个加到哪里?
回复
kingfish 2003-03-08
typedef struct tagRECT
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
回复
Sammo 2003-03-08
现在是需要tagRECT*类型耶,而不是RECT,好像BCB里没有tagRECT*类型是吗?
我怎么才可以使用这个函数:
BOOL WINAPI StartOverlay(DWORD dwCard,HWND hWnd,RECT *rc);
为什么VC里的RECT在BCB里变成了tagRECT*了?
回复
kingfish 2003-03-08

Use extern "C" to prevent function names from being mangled in C++ programs.

低下那个错误好像强制转一下就行了
(RECT)
回复
Sammo 2003-03-08
To kingfish(八百里秦川@龙城异客):
谢谢兄弟!终于可以了!顺便请问一下,这个错误怎么回事!刚刚解决了一个,怎么又出现另外一个!VC++的DLL在BCB里调用就这么难吗?哎!

[C++ Error] Main.cpp(27): E2034 Cannot convert 'TRect' to 'tagRECT *'
[C++ Error] Main.cpp(27): E2342 Type mismatch in parameter 'rc' (wanted 'tagRECT *', got 'TRect')
回复
Sammo 2003-03-08
谢谢!谢谢kingfish兄,我试试去!:)
回复
kingfish 2003-03-08
发给你了,怀疑你其它地方写错了,比如语法错误之类
回复
Sammo 2003-03-08
extern "C"{ //加
//函数
} //加


这句我加了,但是还是提示这个错误!真奇怪!请您把您的例子发给我试试看好吗?谢谢!:)
sammochoi@21cn.com
回复
Sammo 2003-03-08
To kingfish(八百里秦川@龙城异客):
怎么办啊?怎么解决呢?调用会这么难吗?还是不行耶!老兄帮忙想想啊!Thanks!:)
回复
kingfish 2003-03-08
少了一个字,是没出现你说的问题

。在.h

extern "C"{ //加
//函数
} //加
回复
加载更多回复
相关推荐
发帖
Windows SDK/API
创建于2007-08-02

1206

社区成员

C++ Builder Windows SDK/API
申请成为版主
帖子事件
创建了帖子
2003-03-08 04:15
社区公告
暂无公告