VC++ 建立动态连接库,使一个函数的返回值是list<sceinfo> sceinfo 是结构体 如何定义头文件和.cpp 我第一次写动态链接库,请各位同行,有哪位写过类似的程序,贴些片段,以供参考,下面我贴一下出错的程序。#ifndef LIB_H
#define LIB_Htypedef struct SCE_Info
{
CString ID;
CString name;
CString driver_version;
CString provider_name;
}SCEInfo;//出错的地方 结构体定义提示出错extern "C" int add(int x,int y);
extern "C" int jian(int x,int y);
extern "C" int chen(int x,int y);
extern "C" char * getStr();
extern "C" list<SCEInfo> GetSCE();//出错的地方
#endif
lib.h
#include "lib.h"
#include "windows.h"
#include "stdio.h"BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("\nprocess attach of dll");
break;
case DLL_THREAD_ATTACH:
printf("\nthread attach of dll");
break;
case DLL_THREAD_DETACH:
printf("\nthread detach of dll");
break;
case DLL_PROCESS_DETACH:
printf("\nprocess detach of dll");
break;
}
return TRUE;
}int add(int x,int y)
{
return x + y;
}
int jian(int x,int y)
{
return x - y;
}
int chen(int x,int y)
{
return x * y;
}
char * getStr()
{
char* p = "SSSSSSS!"; return p;
}
// list<SCEInfo> GetSCE()
// {
//
// }lib.cpp
#define LIB_Htypedef struct SCE_Info
{
CString ID;
CString name;
CString driver_version;
CString provider_name;
}SCEInfo;//出错的地方 结构体定义提示出错extern "C" int add(int x,int y);
extern "C" int jian(int x,int y);
extern "C" int chen(int x,int y);
extern "C" char * getStr();
extern "C" list<SCEInfo> GetSCE();//出错的地方
#endif
lib.h
#include "lib.h"
#include "windows.h"
#include "stdio.h"BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("\nprocess attach of dll");
break;
case DLL_THREAD_ATTACH:
printf("\nthread attach of dll");
break;
case DLL_THREAD_DETACH:
printf("\nthread detach of dll");
break;
case DLL_PROCESS_DETACH:
printf("\nprocess detach of dll");
break;
}
return TRUE;
}int add(int x,int y)
{
return x + y;
}
int jian(int x,int y)
{
return x - y;
}
int chen(int x,int y)
{
return x * y;
}
char * getStr()
{
char* p = "SSSSSSS!"; return p;
}
// list<SCEInfo> GetSCE()
// {
//
// }lib.cpp
如果是console库肯定不支持CString,建议你改成char[MAX_PATH]看看
extern "C" list<SCEInfo> GetSCE();//出错的地方
行吗?应该要用扩展dll吧。而且你还得把list和CString等这些类也一并导出,否则会有非常烦人的警告。你们这方案有问题!
extern "C" list<SCEInfo> GetSCE();这里扩展声明了,定义呢?
不是MFC的不能用CString,要用string。