我现在要编一个DLL供PB调用,有两个函数同名,只是参数稍有不同,请问怎么定义def文件?例如:
  long ABC(int intFlag,char* aaa)
  long ABC(int intFlag,long* bbb)应该怎么去编这样的dll ?

解决方案 »

  1.   

    __declspec(dllexport)  设置导出不用在def中声名
      

  2.   

    回复人: DentistryDoctor(My heart will fly,in the sky.) ( ) 信誉:182  2005-07-19 09:01:00  得分: 0   
       __declspec(dllexport)
    -------------------------------------
    我已经加上了,在def文件中怎么写?
     
     
      

  3.   

    不要def文件的话,编译可以通过,但是在PB中调用时出错。
      

  4.   

    __declspec(dllexport)  long long ABC(int intFlag,char* aaa)
     __declspec(dllexport)  long long ABC(int intFlag,long* bbb)
      

  5.   

    那是因为导出后被自动修改了函数名,用depends可以查到,调用修改后的名字
    不然就要用def文件才行了
      

  6.   

    我的DLL是用来给别的语言调用的,不用def文件可以吗?
      

  7.   

    关注一下,不知道如何能不能直接导出重载函数?
    如果不用def文件,又不想函数名被改变,必须添加extern "C"
    也就是
    extern "C" __declspec(dllexport) long long ABC(int intFlag,char* aaa);
    不过能不能这样导出重载函数我就不知道了。你试过以后告诉我一下。
      

  8.   

    要使PB可以调用 就要使用 extern "C"
     否则名字会被C++编译器 强压 页就是换了个新的文字。但是C语言 不支持函数重载的所以 还是换个名字就行了拉。
      

  9.   

    在这两个函数之上再包装一个函数
    long DABC(int intFlag,void* aaa,bool bChar);
    {
      if(bChar)
        return ABC(intFlag,(char *)aaa);
      else
        return ABC(intFlag,(long *)aaa); 
    }
      

  10.   

    有没有办法可以实现:在PB中声明两个同名函数(参数不同),但是在VC中是在一个DLL文件中?
    如果VC不行,有别的语言可以吗?
      

  11.   

    有没有办法可以实现:在PB中声明两个同名函数(参数不同),但是在VC中是在一个DLL文件中?
    如果VC不行,有别的语言可以吗?
    ==========================
    这个倒是可以的。
    譬如你在VCDLL中导出两个函数
    long ABC_char(int intFlag,char* aaa);
    long ABC_long(int intFlag,long* bbb);
    然后在pb中这样使用
    function long ABC( long intFlag, char* aaa) Library 'DLL的名称' alias for ABC_char
    function long ABC( long intFlag, long* aaa) Library 'DLL的名称' alias for ABC_long
      

  12.   

    由于我不怎么了解PB,上面的定义你不能直接拿来用,
    因为PB是没有指针的,只有引用,但是方法应该是可行的。
    譬如
    function long ABC( long intFlag, char* aaa) Library 'DLL的名称' alias for ABC_char
    应该改为
    function long ABC( long intFlag, ref string aaa) Library 'DLL的名称' alias for ABC_char
      

  13.   

    解决了!谢谢上面的各位!1、在dll中合并为一个函数:
    extern "C"  long __stdcall ABC(int intFlag,void* aaa)
    然后在函数内部,根据情况对aaa进行 (char*) 和 (long*),分别进行处理。
    这样def文件中只有一个函数名ABC,就没有问题了。2、在PB中声明如下:
    Function long ABC(long intFlag,ref string aaa) Library 'my.dll' alias for "ABC"
    Function long ABC(long intFlag,ref long bbb) Library 'my.dll' alias for "ABC"