dll如何输出结构体?

zss1103 2007-02-15 11:36:42
//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
...全文
1128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sz2007 2007-03-07
  • 打赏
  • 举报
回复
1 同意 ATField(field)

2 Momoass(尋魚賂雁,斃月休花)
传指针不就行咯
--------------

>>这个不行。
双杯献酒 2007-02-24
  • 打赏
  • 举报
回复
在C++, struct实际是个class
标准的DLL是不能够输出class的.
不过,MFC扩展DLL可以输出class
Momoass 2007-02-21
  • 打赏
  • 举报
回复
传指针不就行咯
ATField 2007-02-16
  • 打赏
  • 举报
回复
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
}
落入凡间的猪 2007-02-16
  • 打赏
  • 举报
回复
unsigned char* p ;

struct* s = (struct*)p;
s->v;
s->d;
oyljerry 2007-02-16
  • 打赏
  • 举报
回复
传void*,然后转换
ATField 2007-02-15
  • 打赏
  • 举报
回复 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;
zss1103 2007-02-15
  • 打赏
  • 举报
回复
我做的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;//距离
};

syy64 2007-02-15
  • 打赏
  • 举报
回复
通过函数的参数输出吧。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧