读书人

关于可以跨语言调用的dll动态调用的有

发布时间: 2012-04-22 18:34:46 作者: rapoo

关于可以跨语言调用的dll动态调用的问题
为了工作需要,我需要用vc写一个dll提供给vb编写者调用。
我在导出函数前面已经进行了__stdcall的修饰。编译完成,生成了需要的LIB文件等
当我在用vc调试结果时发现了一个大问题。
静态调用这个dll功能完好、正常使用。
当动态调用的时候,程序编译OK,执行出错,从错误返回来看是没能计算到函数入口点。
我不知道为什么?哪位能帮我解答一下,不胜感激。
以下是我的程序代码:
/*************hook.h*********************/
#ifdef HOOK_EXPORTS
#define HOOK_API extern "C" __declspec(dllexport)
#else
#define HOOK_API extern "C" __declspec(dllimport)
#endif

HOOK_API int __stdcall install(int a,int b);

/***********hook.cpp*************/
#include "hook.h"
#include "windows.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;


}

// This is an example of an exported function.
HOOK_API int __stdcall install(int a,int b)
{
return a+b;
}


/**************exec.cpp******************/

#include "stdafx.h"
#include <windows.h>
#include "iostream"
using namespace std;

typedef int (*back)(int,int);//定义函数之指针

int main(int argc, char* argv[])
{
back _back;
HINSTANCE hstdll = LoadLibrary("hook.dll");
if(hstdll==0)
cout<<"Eror to load library"<<endl;
_back = (back)GetProcAddress(hstdll,"install");
if (_back==NULL)
{

cout<<"Errot to get function address"<<endl;
cout<<GetLastError()<<endl;
FreeLibrary(hstdll);
return 0;
}
int result= _back(158,45);//调用函数
FreeLibrary(hstdll);
cout<<result<<endl;

return 0;
}
错在哪里?谁能帮助我。

[解决办法]
建一个dll工程
.cpp 文件写
extern "C" __declspec(dllexport) int _stdcall install(int a,int b)
{
return a+b;
}
.def文件写
LIBRARYdll
EXPORTS install


编译出来的就能被其他语言调用

读书人网 >C++

热点推荐