我只是想试验一下这种功能(鄙人菜鸟):在VC中写一个函数,返回两个整型变量的加和。但是我编译完成以后被告知DLL调用约定错误,代码如下,根据VC下生成的 dll Project 改的,所以代码冗杂,有很多废话:// dllExample.cpp#include "stdafx.h"
#include "dllExample.h"BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
 )
{
    switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
    }
    return TRUE;
}DLLEXAMPLE_API int fnDllExample(int a, int b)
{
return a+b;
}//======================================================================================================// stdafx.h : #if !defined(AFX_STDAFX_H__5C5D2209_68C0_465F_BABB_76D997CC7CF5__INCLUDED_)
#define AFX_STDAFX_H__5C5D2209_68C0_465F_BABB_76D997CC7CF5__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#define WIN32_LEAN_AND_MEAN#include <windows.h>#endif//=============================================================================================//  dllExample.h#ifdef DLLEXAMPLE_EXPORTS
#define DLLEXAMPLE_API __declspec(dllexport)
#else
#define DLLEXAMPLE_API __declspec(dllimport)
#endifDLLEXAMPLE_API int fnDllExample(int a);===============================================================================================//  def fileLIBRARY dllExample
EXPORTS
fnDllExample=============================================================================================='vb source code:Option Explicit
Private Declare Function fnDllExample Lib "dllExample.dll" (ByVal a As Integer,ByVal b As Integer) As Integer
    
Private Sub cmdGenerate_Click()
    Dim Result As Integer
        Result = fnDllExample(1,2)
    MsgBox Result, vbOKOnly, "Result"
End Sub
以上就是我的这一坨代码了,dll的编译没有问题,但是就是不能调用。如果那位大侠能够给一个简单的代码,或者给二三指点,小弟感激不尽。

解决方案 »

  1.   

    DLLEXAMPLE_API int fnDllExample(int a, int b)
    {
    return a+b;
    }
    这个修改为 __stdcall 方式。VB声明将 Integer 改为 Long
      

  2.   

    #ifdef DLLEXAMPLE_EXPORTS
    #define DLLEXAMPLE_API __stdcall(dllexport)
    #else
    #define DLLEXAMPLE_API __stdcall(dllimport)
    #endif
      

  3.   

    建议楼主用cmd输入命令行,dumpbin /exports dllpath查看dll的导出函数名,确认一下
      

  4.   

    看看这个范例
    http://blog.csdn.net/SupermanKing/archive/2010/03/05/5347763.aspx
    还有,函数声明成静态的比较好点 _stdcall