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