可以在VC中使用的无模式对话框DLL的例子(100分)

  • 主题发起人 主题发起人 seagull
  • 开始时间 开始时间
S

seagull

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,谁有可以在VC中使用的无模式对话框DLL的简单例子,请mail一个给我,
越快越好,我在Delphi中没问题,但却不能在VC中使用,如何是好?
 
在DELPHI中能用,在VC中不能用,主要是你的调用约定有问题,你可在DELPHI中
相应的输出函数声明中使用stdcall,看看行不?我已经用过这样的方法,但记得
不是很清楚了。如果不行,你再告诉我,我尽可能给你一个简单的例子。
 
谢谢您的回答,我曾尝试将调用约定改为stdcall,但这样一改,在Delphi中调用
也会有"Access Vialation at address 00000246,Read of address 0000246"的
错误,但对话框没有问题,在VC中在Project中的Settings中静态加载,还没有调用任
何过程就报错,意思是不认识的文件,能麻烦您给我寄一个简单了例子吗?如果能有
Delphi和VC中调用的例子就更好了,没有也没关系.
谢了!
 
对于Delphi:
若你没有参数传递到被调用的DLL,则不应发生你所说的访问错误,若你使用了参数
,则你应保证主程序与被调用的DLL中均使用STDCALL或均不使用STDCALL。
对于VC++:
你应保证在DELPHI的DLL中使用STDCALL,然后你可在VC的主程序中写如下代码,
调用DLL中的指定过程。这里有一简单的例子,演示如何调用由DELPHI生成的DB_DLL
中的ShowNullFormModal过程,至于有参数时怎么调用,我就不说了,你既然使用
VC++,应该对此可举一反三的:
顺便说一下,我不明白你为什么要使用静态调用,根本没什么好处。
{
HINSTANCE h0;
FARPROC f0;
h0=LoadLibrary("e://delphi3//db_dll.dll");
if (h0!=0)
{
f0=GetProcAddress(h0,"ShowNullFormModal");
(*f0)();
//调用之
}
FreeLibrary(HMODULE(h0));
}
 
谢谢!我按照您的办法,在Delphi中使用Dll果然没问题了,谢谢!
不过,VC++6.0中不认识您所说的"FARPROC ",不知是什么原因?
还有,我学VC++学了一个月,只知道一些基本的用法,所以还稀里糊涂
的,直接用VC++做的无模式对话框DLL在资源调用方面总不对,我放了一个
ListCtrl在上面,在初始化时指定其ImageList属性,并通过LoadIcon为
ImageList增加了图标,但调用后一切正常,只是图标没有出现,也不报错,
但ListCtrl上只有孤零零的字符,没有图标,所以考虑用Delphi做,那知做
出来又没法在VC++中用,我也不想静态调用,只是尝试罢了,谁知还是不行,
真不知如何是好.
 
我是在VC5下编写的,若该程序不能在VC6下不能认识FARPROC,你可以查看一下
GetProcAddress的联机帮助提示嘛,看一下他的返回值是什么不就行了?看来
我还是建议你不要去学VC了,既然你已经开始用Delphi了,何必舍近求远呢?我
本来也是学VC的,后来一用上Delphi,就没想过去用VC了,若用你最好用CBuilder,
和Delphi身出同门,且易学而功能强大。
 
yanghaijun:
谢谢您的回答,如果可以的话,我是绝对不想学VC的,那对我
来说,有点象个噩梦。但是,所谓人在江湖,身不由己,如果不得不
学,又能奈何呢?
 
后退
顶部