//lib.h
#ifndef LIB_H
#define LIB_H
extern "C"int _declspec(dllexport)add(int x,int y);
extern "C"int _declspec(dllexport)sss(int a);
extern "C"struct _declspec(dllexport)result;//这样写不知道对不对
#endif//lib.cpp
#include "lib.h"
struct result
{
int Num1;
int Num2;
}result,*result1; 
int add(int x,int y)
{
result.Num1 = x;
result.Num2 = y;
int b;
b = (x+y)*sss(5);
return b;
}
int sss(int a)
{
return a;
}// zssdlg1Dlg.cpp
struct result
{
int Num1;
int Num2;
}result,*result1;
#pragma comment(lib,"zsstest1.lib")
extern "C"_declspec(dllimport)add(int x,int y);void CZssdlg1Dlg::OnBtnCal() 
{
int r = add(2,3);
CString s;
s.Format("%d",r);
AfxMessageBox(s);
int a[2];
// a[0] = result.Num1;
// a[1] = result.Num2;

}请问如何才能输出结构体result

解决方案 »

  1.   

    你是输出变量result还是结构result?
    结构体本身不用export,只用#include就好了
    输出变量的话可以在头文件中这么写:
    #ifdef MY_DLL
    #define MY_DLL_API __declspec(dllexport)
    #else
    #define MY_DLL_API __declspec(dllimport)
    #endif
    struct my_struct
    {
    int member;
    };
    MY_DLL_API extern my_struct export_variable;
    然后在某个.cpp中定义:
    my_struct export_variable;
      

  2.   

    我做的dll主要用来计算,最后输出多个结果,想用结构体表示;
    struct ss
    {
      int v;//速度
      int d;//距离
    };
    ATField(field) 谢谢你给我的提示
    我这样写可以吗?
    在头文件中
    #ifdef MY_DLL
    #define MY_DLL_API __declspec(dllexport)
    #else
    #define MY_DLL_API __declspec(dllimport)
    #endif
    struct my_struct
    {
      int v;//速度
      int d;//距离
    };
    MY_DLL_API extern my_struct 然后在工程dlg.cpp中定义一个结构体
    struct my_struct
    {
      int v;//速度
      int d;//距离
    };
      

  3.   

    unsigned char* p ;struct* s = (struct*)p;
    s->v;
    s->d;
      

  4.   

    to zss1103:
    你这样写是不对的。我以为你想要输出变量。但实际上看你的要求,并不需要这么做,而是直接在DLL中定义一个函数,进行计算然后把结果返回就可以了。头文件your_dll.h可以这样写:
    #ifdef MY_DLL
    #define MY_DLL_API __declspec(dllexport)
    #else
    #define MY_DLL_API __declspec(dllimport)
    #endif
    struct my_struct
    {
      int v;//速度
      int d;//距离
    };
    MY_DLL_API void Compute(my_struct &result);
    然后在your_dll.CPP中实现Compute进行计算,返回结果
    void Compute(my_struct &result)
    {
        .... // do the computation
    }结构体的定义不用输出,直接#include,比如某个程序要用到你的DLL,那么可以写
    #include "your_dll.h"void main()
    {
        my_struct result;
        Compute(result);
        ....// use result
    }
      

  5.   

    在C++, struct实际是个class
    标准的DLL是不能够输出class的.
    不过,MFC扩展DLL可以输出class
      

  6.   

    1 同意 ATField(field)2  Momoass(尋魚賂雁,斃月休花)
       传指针不就行咯
    -------------->>这个不行。