各位老大救命!!!!!!分不够,我还可以加说话算话!!!只要解决问题

yeshucheng 2004-08-10 07:33:47
我现在用delphi去调用dll,dll也已经注册了
我现在就是要做的很简单的问题,只要通过按狃点击能够不报错误就行
我只在form中放了个button,响应事件程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var strserverIP,strport,strbackinfo:string;
x:smallint;
begin
strserverIP:='210.15.42.108';
strport:='80';
strbackinfo:=SetLocationServerA(strserverIP,strport);
if strbackinfo='ok' then
begin

end;
x:=3;

end;


函数及其常数如下:
const
DLLname='ttt.dll';
implementation
function SetLocationServerA(strserverIP:string;strport:string):string;
stdcall;external DLLname name'SetLocationServer';


但是编译后出现的提示是:无法定位输入点SetLocationServerA于动态连接库ttt.dll
...全文
116 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengcg 2004-08-11
  • 打赏
  • 举报
回复
帮你顶一下!
对 VB 不太熟,但是我刚才看了 VB 版的一些文档,觉得用 VB 写普通 DLL 实际上是很复杂的:http://dev.csdn.net/article/26/26770.shtm ;你可以参考。

如果非要用 VB 做 DLL ,按经验倒是建议你做成 ActiveX 控件的方式,直接导入到 Delphi 中用,导入后使用就方便很多,就是过程多了一些。
yeshucheng 2004-08-11
  • 打赏
  • 举报
回复
顶下!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
yeshucheng 2004-08-11
  • 打赏
  • 举报
回复
在vb中写的dll就是如下:(我们工程中用到的是webservice soap协议,所以这当中只能用string类型)
Public Function setLocationServer(ByVal strIP As String, ByVal strPort As String) As String
Dim ServerInfo As String
On Error GoTo Errhand

modl.strServerUrl = "http://" + strIP + ":" + strPort + _
"/axis/services/gongyibanServer?wsdl"
setLocationServer = "ok"
Exit Function

Errhand:

setLocationServer = "定位服务器出错" + Space(LenB("定位服务器出错"))
On Error GoTo 0
End Function
zhengcg 2004-08-10
  • 打赏
  • 举报
回复
突然想起,如果你的这个函数(如:setLocalserver)本身就是一个类函数(如:GFYSystem.setLocalserver()),肯定是不能当成普通的方法导不出来的,应该是采用导出类的方式才可以的!因为这个函数已经被类封装了!

导出类相对比较复杂,你要查一下相应的参考才行,一般普通应用也不建议在不同的开发语言间采用导出类的方式!
zhengcg 2004-08-10
  • 打赏
  • 举报
回复
用 VB 开发的 DLL 肯定是可以用 Delphi 调用的,只要参数和Export是对的。在调用 VC 写的程序经常也出现这个问题,基本都是函数名、参数顺序、导出方式不同造成的,最好能跟开发 DLL 的沟通(如果你自己最好就帖出来大家分析一下)。还有对参数的修改问题要注意:PChar(string)这样的参数一修改就会报错的。但我觉得你的报错是因为函数名和参数顺序造成,因为根本编译不过。
linzhengqun 2004-08-10
  • 打赏
  • 举报
回复
如果你贴Dll的代码出来会好一些吧,
或者其中的输出函数贴出来
capoatguitar 2004-08-10
  • 打赏
  • 举报
回复
我只知道用VC做的DLL和DELPHI做的参数顺序有时候不一样。
yeshucheng 2004-08-10
  • 打赏
  • 举报
回复
我现在觉得是否vb开发的dll,不能用delphi来调用啊?

我其实已经用了linzhengqun(风) 的方法来做,可惜还是报同样的错误!!!!
hthunter 2004-08-10
  • 打赏
  • 举报
回复
这种情况理论上应该是字符串的问题,我以前都是这样解决的,你尽管试试,不行的话只好试试linzhengqun的方法了
hthunter 2004-08-10
  • 打赏
  • 举报
回复
用PChar的方法linzhengqun已经说得很清楚了

编辑工程文件就是在Delphi按Ctrl + F12找到工程文件(如Project1)打开,或者直接用记事本打开.dpr文件,在uses后面的第一行加上ShareMem,

不过后面这种方法好像发布的时候要加上Borlndmm.dll的,到时候你在测试的时候找一台没有装过Delphi的机器试试看就知道了的
yeshucheng 2004-08-10
  • 打赏
  • 举报
回复
各位老大,帮帮小弟弟,以后大家有什么关于j2ee方面的问题可以到java版块找我:)
希望大家还望指点
zhengcg 2004-08-10
  • 打赏
  • 举报
回复
建议先用工具看看输出函数的名字(如Delphi 自带的 TDUMP 或其他一些第三方工具),在CSDN 有很多文章介绍的。我看主要问题是这个。对导出名字可以用关键字 cdecl 试试。

还有如“linzhengqun(风)”所说的,不要用 string 做参数,一般在 dll 里或调用都是用 PChar 做参数,Win API 一般是 LPSTR (就是 PChar)类型的。
我是老姚 2004-08-10
  • 打赏
  • 举报
回复
调用DLL用PCHAR,STRING很多DLL都会出错
hthunter 2004-08-10
  • 打赏
  • 举报
回复
用PChar或者在引用DLL的工程文件Uses ShareMem;
yeshucheng 2004-08-10
  • 打赏
  • 举报
回复
dll是用vb开发的,它是在一个类下面开发的,例如:
GFYSystem.setLocalserver();
capoatguitar 2004-08-10
  • 打赏
  • 举报
回复
用什么工具写的DLL??把stdcall去掉试试。
linzhengqun 2004-08-10
  • 打赏
  • 举报
回复
DLL的输出函数最好不要用String,而用Pchar
const
DLLname='ttt.dll';
implementation

function SetLocationServerA(strserverIP,strport:pchar):pchar;
stdcall;external DLLname ;

procedure TForm1.Button1Click(Sender: TObject);
var strserverIP,strport,strbackinfo:string;
x:smallint;
begin
strserverIP:='210.15.42.108';
strport:='80';
strbackinfo:=SetLocationServerA(pchar(strserverIP),pchar(strport));
if strbackinfo='ok' then
begin

end;
x:=3;

end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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