做了一个MFC常规DLL,导出一个函数,且DLL的环境设置为使用MFC作为静态链接库
string aaa(string str)
{
return string(str+" OK!");}做了一个控制台程序来测试:
#include<iostream>
#include<string>
using namespace std;#pragma comment(lib, "MFC DLL.lib")string aaa(string str);void main()
{
cout<<aaa("ddd")<<endl;
}
问题:运行时,没有输出,好像卡住了,
无论控制台程序的环境设为
1.不使用MFC
2.使用MFC作为DLL
3.使用MFC作为静态链接库
结果都一样,运行不出来?????
string aaa(string str)
{
return string(str+" OK!");}做了一个控制台程序来测试:
#include<iostream>
#include<string>
using namespace std;#pragma comment(lib, "MFC DLL.lib")string aaa(string str);void main()
{
cout<<aaa("ddd")<<endl;
}
问题:运行时,没有输出,好像卡住了,
无论控制台程序的环境设为
1.不使用MFC
2.使用MFC作为DLL
3.使用MFC作为静态链接库
结果都一样,运行不出来?????
string aaa(string str)
{ return string(str+" OK!"); } #include <iostream>
#include <string>
using namespace std; extern "C" __declspec(dllimport)
string aaa(string str); #pragma comment(lib, "MFC DLL.lib") void main()
{
cout < <aaa("ddd") < <endl;
}
UP这个,
特别是在VC6中,你就不应该使用std::string作为返回值。
除非你改设置,让这些模块链接到同样的CRT中。你应该返回char*
并且提供Release(char* p)方法。
"有歧义"是什么意思to 8楼的:特别是在VC6中,你就不应该使用std::string作为返回值。
为什么啊???
除非你改设置,让这些模块链接到同样的CRT中。
什么意思啊???什么叫链接到同样的CRT中?????怎么改设置???
我改成
char* aaa(char* str) 且DLL的环境设置为使用MFC作为静态链接库 那么测试程序为控制台,且只有当测试程序设置为:使用MFC作为DLL时才能运行,否则出错.为什么???以上的问题就是我另一篇帖子的问题:
http://topic.csdn.net/u/20081117/11/e306f8bf-b509-420d-a37f-a485c86ae351.html
to cnzdgs:
通过这个问题,就可以证明你在我的另一篇帖子的回答好像不太正确.
释放了不是它分配的空间,无论是参数还是返回值都不要使用string。包括STL。
1,用 DEF 导出函数; MfcDll.def : Declares the module parameters.LIBRARY "MfcDll.DLL"EXPORTS
aaa
2,写个头文件,好给其他用,例如 MfcDll.h
这儿文件里是那个函数的定义
string aaa( string str );然后就很简单了,需要用你这个 DLL 的人只要:
#include "MfcDll.h"
#pragma comment(lib, "MFC DLL.lib")
然后 aaa( string str ) 调用即可。