积极答复者
dll的问题

问题
-
控制台项目
调用dll函数int add(int a, int,b)
{return(a+b);}
导出dll,可以调用
在return(a+b);}前面加一个messagebox("faf"); 就出错,why?
- 已编辑 Honny_yeyh 2011年12月21日 5:00
答案
-
你好!
首先,在win32 console application,可以调用MessageBox函数弹出对话框。比如下面的语句:
::MessageBox(NULL,"how are you?", "hello",MB_OKCANCEL);
会弹出如下图所示的对话框:
“我有一个空函数,里面有事件,就是弹出messagebox对话框",我对这句话的理解是,你有一个返回值和参数都为空的函数,这个函数内部调用MessageBox弹出对话框,而且这个函数是事件的处理函数。这样在控制台程序中也是可以的如期执行的。你可以参看我在SkyDrive 上的C++代码:https://skydrive.live.com/?cid=5f3fd51d13056967&id=5F3FD51D13056967%21114。
我定义了一个返回值为int 的函数,
int func() { return ::MessageBox(NULL,"how are you??? Fine. And you?", "hello",MB_OKCANCEL); }
在main函数中调用是也没有问题的。
希望我的回复对你有所帮助!
谢谢!
Helen Zhao [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Helen Zhao 2011年12月27日 6:44
- 已标记为答案 Honny_yeyh 2011年12月27日 8:36
全部回复
-
在导出函数调用所有MFC资源函数都要在调用前进行资源切换。
麻烦把正确答案设为解答。- 已标记为答案 Honny_yeyh 2011年12月21日 12:11
- 取消答案标记 Honny_yeyh 2011年12月21日 12:17
-
我函数是在vb里面写的,是把txt转化为mdb数据库, 然后用第三方工具导出普通dll,然后在c++里面调用,运行到函数体的时候直接跳过去了,根本没有运行
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>typedef double (__stdcall * PADD)(double,double);
typedef void (__stdcall * Connect)(void);int main(int argc, char * argv[])
{
HINSTANCE hinstDLL=NULL;
PADD Procadd = NULL;
Connect pConnect=NULL;
hinstDLL = LoadLibrary("Testdll.dll");if (hinstDLL)
{Procadd = (PADD)GetProcAddress (hinstDLL,"addition");
if (Procadd == NULL)
{
FreeLibrary(hinstDLL);
return -1;
}
double dRet = Procadd(2.3,4.5); //这里能运行
printf("%lf\n",dRet);
pConnect = (Connect)GetProcAddress (hinstDLL,"mathadd");
if (Procadd == NULL)
{
FreeLibrary(hinstDLL);
return -1;
}
Connect();
GetLastError();
Connect();
}
FreeLibrary(hinstDLL);
return 0;
}- 已编辑 Honny_yeyh 2011年12月21日 12:18
-
pConnect = (Connect)GetProcAddress (hinstDLL,"mathadd");
这里返回的pConnect为NULL ?
Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
pConnect没有为NULLConnect(); //没有运行
GetLastError(); //运行
Connect(); //没有运行 -
dll是用第三方工具在vb里面编译的
代码是
public function mathadd()
msgbox("fff")
end function
- 已编辑 Honny_yeyh 2011年12月25日 5:44
-
Honny_yeyh你好!
我了解到,你是利用第三方工具从VB导出DLL,在C++中调用。你确信导出的DLL没有错误吗?
我觉得这个问题好像跟C++本身没有多大关系。
很可能是第三方的工具造成的不匹配,也有可能是你的VB程序有错误,
我建议你在用C++重建一个DLL实现相似的功能,然后在你的项目中调用这个DLL。
如果还有什么问题的话,欢迎你贴出来,我们会继续帮你解决。
祝你好运!
Helen Zhao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Honny_yeyh 2011年12月27日 4:21
- 取消答案标记 Honny_yeyh 2011年12月27日 4:21
-
你好!
首先,在win32 console application,可以调用MessageBox函数弹出对话框。比如下面的语句:
::MessageBox(NULL,"how are you?", "hello",MB_OKCANCEL);
会弹出如下图所示的对话框:
“我有一个空函数,里面有事件,就是弹出messagebox对话框",我对这句话的理解是,你有一个返回值和参数都为空的函数,这个函数内部调用MessageBox弹出对话框,而且这个函数是事件的处理函数。这样在控制台程序中也是可以的如期执行的。你可以参看我在SkyDrive 上的C++代码:https://skydrive.live.com/?cid=5f3fd51d13056967&id=5F3FD51D13056967%21114。
我定义了一个返回值为int 的函数,
int func() { return ::MessageBox(NULL,"how are you??? Fine. And you?", "hello",MB_OKCANCEL); }
在main函数中调用是也没有问题的。
希望我的回复对你有所帮助!
谢谢!
Helen Zhao [MSFT]
MSDN Community Support | Feedback to us
- 已编辑 Helen Zhao 2011年12月27日 6:44
- 已标记为答案 Honny_yeyh 2011年12月27日 8:36