很长时间之前 ,就遇到过这样的问题,一个工程,单独调用某个 外部函数,没有问题,但是一个工程里,如果调用了多个DLL里的多个函数,就很容易出错, 错误提示是 bad runtime function reference at line 1 之类的,就好像是没有声明这个函数,但实际已经声明了.有时候在声明里,把多个函数的声明顺序改一下,又可以正常运行了.
以下是声明里的内容
FUNCTION string MDString(string arg1,int arg2) Library "m.dat" alias for "MDString;Ansi"
Function int b64_size(ulong size,ulong flag) Library "jmjm.dll" alias for "b64_size";
function int b64_des(ref String in,ref string out,string key,ulong size,ulong flag) Library "jmjm.dll" alias for "b64_des";
Function long FindWindowExA( long hParent, long hChildAfter, String lpszClass, String lpszWindow ) Library "user32.dll" alias for "FindWindowExA;ANSI"
//api函数,工具栏字体,将以下API放在公用声明里
FUNCTION ulong GetWindowulong(ulong hwnd,ulong nIndex) LIBRARY "user32.dll" ALIAS FOR "GetWindowLongA"
Function long FN_ToolBarSetFont(long unknown,string fontname,long fontsize,ulong unknown1,string str) library "pbvm115.dll" alias for "FN_ToolBarSetFont;ANSI"
Subroutine CopyMemory( long dest,ref blob source,long len) library "kernel32.dll" ALIAS FOR "RtlMoveMemory;ANSI"
function ulong GetLastError () library "kernel32.dll" ALIAS FOR "GetLastError;ANSI"
FUNCTION ulong FindWindowEx(ulong hWnd1,ulong hWnd2,ref string lpsz1,ref string lpsz2) LIBRARY "user32.dll" ALIAS FOR "FindWindowExA"
Function long getcpuid() Library "c.dat"
//加密解密
Function boolean DiskID32(ref string model,ref string id) library "d.dat" alias for "DiskID32"
------解决方案--------------------
没遇到过,友情帮顶.
------解决方案--------------------
估计是dll内部的问题,没遇到过~~
------解决方案--------------------
各动态库之间,尤其是自己编写的动态库之间是不是有冲突。
记得以前碰到过一个问题,我使用的动态库的文件名,同系统中的某个动态库的文件名重复了,结果使用的时候总是报错,找了很久才发现。
------解决方案--------------------
楼主用的哪个版本的PB?我在11.5中也遇到过类似的问题,几乎和你的一模一样,也是没办法解决。。。。。
语句换行以后就能正常运行。