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

解决方案 »

  1.   

    上来就先#include "lib.h"?那你的CString在哪里定义的?
      

  2.   

    CString是MFC中定义的,你的库是MFC动态库还是console库?
    如果是console库肯定不支持CString,建议你改成char[MAX_PATH]看看
      

  3.   

    list<SCEInfo>有问题,模板参数只能是类名或整数(枚举也算整数).
      

  4.   

    方案上是这么定义的,SCEInfo 是一结构体,里面存储类似于实体的信息。如何解决?
      

  5.   

    C函数却返回一个类:
    extern "C" list<SCEInfo> GetSCE();//出错的地方
    行吗?应该要用扩展dll吧。而且你还得把list和CString等这些类也一并导出,否则会有非常烦人的警告。你们这方案有问题!
      

  6.   

    基本成型,添加完def文件之後,你做個testAP測試一下。
      

  7.   

    有道理,不妨返回结构体数组指针,并且把CString类型都改为char 数组。
      

  8.   

    什么的工程?MFC?
    extern "C" list<SCEInfo> GetSCE();这里扩展声明了,定义呢?
    不是MFC的不能用CString,要用string。
      

  9.   

    写的是win32 动态链接库,目的只有一个,把数据存入结构体里面,就是以list<SCE_Info>的形式正确返回,我是照着例子程序写的,但只有返回int 型的,没有list<结构体> 形式的,请高手一定帮解决!