关于调用 动态库DLL的有关问题 ,请哪位大神帮看看,多谢了

关于调用 动态库DLL的问题 ,请哪位大神帮看看,谢谢了!
.h 文件如下
#if !defined(GetPcDetailInfo_201307203)
#define GetPcDetailInfo_201307203
#include <Windows.h>
#include <string>
using    namespace    std;
extern "C" __declspec(dllexport)void A();
#endif //GetPcDetailInfo_201307203
----------------------------------------
.cpp
void A()
{
string strTemp;
}
----------------------------------------
编译为DLL后 使用下面程序调用
typedef void(*K)();
int main(int argc, char* argv[])
{
printf("Hello World!\n");
HINSTANCE hDll=NULL;
hDll = LoadLibrary("D:\\try\\ComPuterInfo\\Debug\\ComPuterInfo.dll");
if(hDll)
{
K      sI;
string strInfo;
sI = (K)GetProcAddress(hDll,"A");
sI();
FreeLibrary(hDll);
printf("%s",strInfo.c_str());
hDll = NULL;
}
return 0;
}
如上, 程序运行正常。

void A()
{
string strTemp;
}
修改为
string A()
{
string strTemp;
        strTemp = "123";
        return strTemp;
}

void A(string &a)
{
string strTemp;
        strTemp = "123";
        a = strTemp;
}
PS: 调用程序和头文件做对应修改。
程序在调用后返回结果是正常的 可以得到 123 但是在执行FreeLibrary(hDll);
后 下一句必定崩溃,不知道有没有人遇到类似情况。
最后 我使用的是vc6.0
坐等大神出手,谢谢~!

------解决方案--------------------
老问题了,不要在dll导出函数以string作返回值。
http://www.cnblogs.com/liangbin/articles/2158382.html

------解决方案--------------------
BOOL A(LPTSTR pszBuffer, int nBufLen)
{
    if (pszBuffer == NULL 
------解决方案--------------------
 nBufLen == 0) return FALSE;