我在VC中建了个 Win32 Dynamic Link Library->a simple dll project
然后写了个函数
extern "C" _declspec(dllexport) int ZDS(int a)
{
  return a*10;
}
然后编译成DLL在VB中调用,却提示DLL调用约定错误,如果把VB编译成可执行文件,却不会提示错误;另外如果ZDS函数没有任何入口参数,在VB中无论是运行VB原程序还是直接运行EXE文件都很正常。
我在VB中的调用如下:
private declare Function ZDS  lib "test.dll" (byval a as long) as long
这个申明应该是没有问题的。
请各位指点,谢谢!

解决方案 »

  1.   

    函数要用__stdcall调用约定,用def文件输出导出函数名。
      

  2.   

    extern "C" _declspec(dllexport) int __stdcall ZDS(int a)
    {
      return a*10;
    }然后用def文件描述导出函数。
      

  3.   

    然后用def文件描述导出函数,也可以在.h文件中声明。
    extern "C" _declspec(dllexport) int __stdcall ZDS(int a);
      

  4.   

    纠错:
    如果用def文件,函数声明时 extern "C" _declspec(dllexport) 这些可以不用。
      

  5.   

    VC写的dll中的函数在vb中调用,只有用def文件描述导出标志,即使用extern "C" 来使它进行C式编译,__stdcall调用约定使得函数名改为“_func@参数字节数”的格式,在VB中不能直观地找到函数入口。
      

  6.   

    我用pb调用vc的dll,即使函数声明时用extern "C" _declspec(dllexport),若不在def文件中描述函数导出标志,则调用出错,而加入则不会!不知道vb是否有这种情况。
    总之pb调用vc的dll,extern "C" _declspec(dllexport)需要声明,def也需要描述函数
      

  7.   

    函数要用__cdecl调用约定也可,好像vc重默认就是这种。
    extern "C" _declspec(dllexport) int __cdecl ZDS(int a)
    {
      return a*10;
    }