我用vc做的一个dll代码如下
extern  "C"   double __stdcall test(BSTR testdll)
{
double ttt = 5.3
return 5.3;
}
输入一个字符串,输出一个浮点型
在def文件中已经定义了接口
用delphi调用的时候
代码如下
function test( testdll: widestring ) : real;stdcall; external 'test.dll';调用中参数字符串testdll可以传进去,但是返回值却传不回来返回值溢出
各位知道是什么原因?

解决方案 »

  1.   

    VC写的DLL用
    CDecl不要使用StdCall的!
    也不要使用String的,改用PCharhttp://lysoft.7u7.net
      

  2.   

    但是无论是cdecl还是stdcall效果都是一样的啊,返回值都溢出,不知道为什么
      

  3.   

    为什么我看到的是BSTR如下?typedef unsigned short * BSTR
    这样的话, 应该:
    type
      PWORD = ^WORD;
    function test( testdll: PWORD) : Double;stdcall; external 'test.dll';还有. 它返回的是双精度, 而不是单精度.有时这样会造成溢出的
      

  4.   

    可是我只是返回一个非常小的数值5.3,精度也很低,怎么会因为精度问题溢出拿,而我的数值传入是ok的,主要是数值传出来的问题,不过还是谢谢c写紫色天空
      

  5.   

    你这样在DLL定义看看.
    我有VC写的DLL都是这样定义的.double WINAPI  test(BSTR testdll) 
    {
    }对于这种DLL, 最好还是把参数一一对应的好.
      

  6.   

    我看了一下WINAPI实际就是stdcall的转定义啊,和stdcall是一样的,我试着用了一下,还是一样的结果啊,难道说,这样的vc程序,delphi就不能调用吗?
      

  7.   

    苍天那,终于解决了,另外新建一个工程,将代码拷入就ok了,为什么老天总是捉弄我们这些可怜人啊!!!!这里衷心感谢c写紫色天空鼎力支!!!!