跨语言编程有多难?

nlstone 2004-05-12 01:31:58
我现在遇到一个跨语言编程的问题,希望得到各位的鼎力之助,敬谢不敏:
VB如何调用VC的代码?能否直接调用VC生成的DLL,使用其中的导出函数?如果可以的话,具体方法是什么样的(我对VB不熟)?
在调用的时候想必会有一个参数类型的问题,我这次会传递一些VC里的char*,int,float等基本内型,具体应该怎么做?
如果你是高手,更希望能对Win32下的多语言编程做些论述,以解众人之惑...
...全文
109 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenziteng 2004-05-14
  • 打赏
  • 举报
回复
UP
nlstone 2004-05-14
  • 打赏
  • 举报
回复
多谢各位的相助啊......
能不能哪位兄台来一小点结论性的代码,两三行就好.
example:
VC做的DLL: vccode.dll 函数按标准C的方法使用DEF导出,放于VB的EXE程序同目录下
导出的函数原型: float Func(HWND hWnd, int iNum, char* szFileName);
需求: 在VB中调用此函数(如果觉得char*不妥的话,可以更改在VC中的原型,总之是一字符串就好),并得到返回值
多谢赐教:)
Kivic 2004-05-14
  • 打赏
  • 举报
回复
基本上很容易
dll引出,有起始点就行,一切交给depend工具
wumylove1234 2004-05-14
  • 打赏
  • 举报
回复
mark!
无响应 2004-05-14
  • 打赏
  • 举报
回复
帮你顶了
Chendy 2004-05-14
  • 打赏
  • 举报
回复
这是可以,我现在正在做的项目就是两种语言的结合体。只要你在使用VC编写Dll时不要忘记提供入口就可以了。
在VB中调用与调用API函数大致相同:
Private Declare Function FunctionA Lib "D:\TEST.dll" (ByVal Para1 As Integer, ByVal Para1 As String) As Long
需要注意的就是vb与vc中对变量类型的处理不同:
如vb中Integer其实与vc中short int相同,而vb中的Long与vc中int相同。

taosihai1only 2004-05-14
  • 打赏
  • 举报
回复
up
supergreenbean 2004-05-14
  • 打赏
  • 举报
回复
呵呵,Double是有点问题,c里面float是单精度的,呵呵

Declare Function Func Lib "xxx.dll" (ByVal hwnd As Long, ByVal iNum As Long, ByVal szFileName As String) As Single

pigpag 2004-05-14
  • 打赏
  • 举报
回复
Declare Function Func Lib "xxx.dll" (Byval hwnd As Long, Byval iNum As Long, Byval szFileName As String) As Double

……不过觉得As Double有点儿怪
nlstone 2004-05-14
  • 打赏
  • 举报
回复
up一下:)
ryuginka 2004-05-13
  • 打赏
  • 举报
回复
up
captainivy 2004-05-13
  • 打赏
  • 举报
回复
c++builder亦可

函数调用像API调用

做dll的资料网上到处有

搜一下~!
LanceJin 2004-05-13
  • 打赏
  • 举报
回复
晕,
pigpag 2004-05-13
  • 打赏
  • 举报
回复
楼上 -> 楼上的楼上(我晕,一直被人插队 :D )
成 -> 程序
pigpag 2004-05-13
  • 打赏
  • 举报
回复
楼上的不好
string类型和标准API数据类型不兼容,需要由Borland内存管理器分配字符串空间,所以要引用ShareMEM空间,而且需要捆扎BorlandMM.DLL。是很大的累赘哟~~~

所以建议改成PChar……就是成需要改得稍微复杂点
fordreams 2004-05-13
  • 打赏
  • 举报
回复
这样的问题我也郁闷呀
dongge2000 2004-05-13
  • 打赏
  • 举报
回复
Delphi怎么做读密码的DLL。
function GetText(txt:string;class:string):longint;stdcall;
var
Pos: TPoint;
Handle: HWND;
Buf: array[0..1024] of Char;
begin
GetCursorPos(Pos);
Handle := WindowFromPoint(Pos);
GetClassName(Handle, Buf, 1024);
txt := Buf;
SendMessage(Handle, WM_GETTEXT, 1024, Integer(@Buf));
class := Buf;
end;
EricaNet 2004-05-13
  • 打赏
  • 举报
回复
我现在就在用vb作前台,我的partner用vc做后台,经常出一些问题。不过好在都能克服。就是数据都搞成字符串传来传去的。呵呵!
超级绿豆是个很牛的人物,他也帮我解决了不少问题!
supergreenbean 2004-05-13
  • 打赏
  • 举报
回复
VB传字符串是很复杂的啦,从unicode变成ansi然后再变成unicode,呵呵,简直比我还变态……

但是如果你c里面直接用BSTR类型的话就OK了,也省去了一些麻烦

跨语言编程没有什么太大的神秘地带,所要做的只是知道要进行交互的语言的交互规则,要找到两者的交集……

呵呵,偶是废话大王,谢谢各位!
tangxiaosan001 2004-05-13
  • 打赏
  • 举报
回复
亚是亚是
加载更多回复(20)

7,763

社区成员

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

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