动态链接库怎么调用类

茹果伱在 2011-03-24 03:20:05
我在dll中这样写
extern "C" _declspec(dllexport) int a;
class _declspec(dllexport) lines
{
public:
int i;
lindes()
{
i = 1;
}
int heihei()
{
i++;
return i;
}

}
然后再另外一个工程里这样写
extern "C" _declspec(dllimport) int a;
_declspec(dllexport) class lines;

有错 不知道怎么改
类这样导出和调用对吗? 类里面的函数要怎么调用?
...全文
298 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
茹果伱在 2011-03-25
  • 打赏
  • 举报
回复
有人在吗
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
帮我看看哦 那个导出 和调用是不是这样写的哦
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
加了 我保证
ccrun.com 2011-03-24
  • 打赏
  • 举报
回复
你贴的太快了.请参考我在6楼的建议,把DLL工程生成的lib文件添加到这个工程中.
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
这是工程2 怎么不行
extern PACKAGE TForm1 *Form1;
extern "C" _declspec(dllimport) int style, i;
extern "C" _declspec(dllimport) int a1[4], b1[4], a2[4], b2[4];
extern "C" _declspec(dllimport) int oldx, oldy, newx, newy;
_declspec(dllexport) class lines;


void __fastcall TForm1::Button1Click(TObject *Sender)
{
i = 1;
lines a(a1[i],b1[i],a2[i],b2[i]);
a.write(PaintBox1->Canvas, a.x1, a.y1, a.x2, a.y2);
}
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
添加了额 你给我看看 这是dll
extern "C" _declspec(dllexport) int style = -1, i = 1;
extern "C" _declspec(dllexport) int a1[4] = {1,2,3,4}, b1[4] = {1,2,3,4}, a2[4] = {1,2,3,4}, b2[4] = {1,2,3,4};
extern "C" _declspec(dllexport) int oldx = 0, oldy = 0, newx = 0, newy = 0;
_declspec(dllexport) class lines;
class lines
{
public:
int x1, y1, x2, y2;
lines(int a1, int b1, int a2, int b2)
{
x1 = a1;
y1 = b1;
y2 = b2;
x2 = a2;
}
void write(TCanvas *Sender, int a1, int b1, int a2, int b2); //画线成员函数
void down(TCanvas *Sender, int X, int Y, TForm *Form1); //鼠标点下
void up(TCanvas *Sender, int X, int Y, TForm * Form1); //鼠标弹起
void move(TCanvas *Sender, int X, int Y, TForm * Form1); //鼠标移动时
};
void lines::write(TCanvas *Sender, int a1, int b1, int a2, int b2) //画线成员函数
{
Sender->MoveTo(a1, b1);
Sender->LineTo(a2, b2);
}
void lines::down(TCanvas *Sender, int X, int Y, TForm *Form1) //鼠标点下
{
oldx = X;
oldy = Y;
if(sqrt(pow((X-x1), 2) + pow((Y-y1), 2)) <= 2)//点在(x1,y1)
style = 1;
else
if(sqrt(pow((X-x2), 2) + pow((Y-y2), 2)) <= 2)//点在(x2,y2)
style = 2;
else
if((x1 == x2)&&(((Y >= y1)&&(Y <= y2))||((Y <= y1)&&(Y >= y2)))//与y轴平行
&&(abs(X-x1) < 10))
style = 0;
else
if((y1 == y2)&&(((X >= x1)&&(X <= x2))||((X<= x1)&&(X >= x2))) //与X轴平行
&&(abs(Y-y1) < 10))
style = 0;
else
if(((X >= x1)&&(X <= x2)||(X<= x1)&&(X >= x2))
&&((Y >= y1)&&(Y <= y2)||((Y <= y1)&&(Y >= y2)))
&&(abs((X*(y2-y1)+Y*(x1-x2)-x1*y2+y1*x2))/sqrt(pow(X, 2)+pow(Y, 2))) < 5)
style = 0;
else
style = -1;
if(style != -1)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
if(style == 1)
{
Sender->Pen->Style = psDot;
Sender->Pen->Color = clBlack;
write(Sender, X, Y, x2, y2);
a1[i] = X; //新的 起点坐标
b1[i] = Y;
}
else
if(style == 2)
{
Sender->Pen->Style = psDot;
Sender->Pen->Color = clBlack;
write(Sender, x1, y1, X, Y);
a2[i] = X; //新的 起点坐标
b2[i] = Y;
}
else
if(style == 0)
{
Sender->Pen->Style = psDot;
Sender->Pen->Color = clBlack;
write(Sender, x1, y1, x2, y2);
}
}
}
void lines::up(TCanvas *Sender, int X, int Y, TForm * Form1) //鼠标弹起
{
newx = X;
newy = Y;
if(style == 1)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
Sender->Pen->Style = psSolid;
Sender->Pen->Color = clBlack;
write(Sender, X, Y, x2, y2);
a1[i] = X; //新的 起点坐标
b1[i] = Y;
}
else
if(style == 2)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
Sender->Pen->Style = psSolid;
Sender->Pen->Color = clBlack;
write(Sender, x1, y1, X, Y);
a2[i] = X; //新的 起点坐标
b2[i] = Y;
}
else
if(style == 0)
{
Sender->Pen->Color = Form1->Color; //画笔颜色和Form原色一样,起到橡皮差的作用
write(Sender, x1, y1, x2, y2);
Sender->Pen->Style = psSolid;
Sender->Pen->Color = clBlack;
write(Sender, x1+(newx-oldx), y1+(newy-oldy), x2+(newx-oldx), y2+(newy-oldy));
a1[i] = x1+(newx-oldx); //新的坐标
b1[i] = y1+(newy-oldy);
a2[i] = x2+(newx-oldx);
b2[i] = y2+(newy-oldy);
}
style = -1;
}
void lines::move(TCanvas *Sender, int X, int Y, TForm * Form1) //鼠标移动时
{
if((sqrt(pow((X-x1), 2) + pow((Y-y1), 2)) <= 2)||(sqrt(pow((X-x2), 2) + pow((Y-y2), 2)) <= 2))//点在(x1,y1)
Form1->Cursor = crSizeWE;
else
Form1->Cursor = crDefault;
if(style == 1)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
Sender->Pen->Color = clBlack;
Sender->Pen->Style = psDot;
write(Sender, X, Y, x2, y2);
a1[i] = X;
b1[i] = Y;
}
else
if(style == 2)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
Sender->Pen->Color = clBlack;
Sender->Pen->Style = psDot;
write(Sender, x1, y1, X, Y);
a2[i] = X; //新的 起点坐标
b2[i] = Y;
}
else
if(style == 0)
{
Sender->Pen->Color = Form1->Color;
write(Sender, x1, y1, x2, y2);
Sender->Pen->Style = psDot;
Sender->Pen->Color = clBlack;
write(Sender, x1+(X-oldx), y1+(Y-oldy), x2+(X-oldx), y2+(Y-oldy));
a1[i] = x1+(X-oldx); //新的坐标
b1[i] = y1+(Y-oldy);
a2[i] = x2+(X-oldx);
b2[i] = y2+(Y-oldy);
oldx = X;
oldy = Y;
}
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
ccrun.com 2011-03-24
  • 打赏
  • 举报
回复
你需要把那个dll生成的lib文件添加到现在的工程中.
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
还有类中的函数怎么调用,在dll中也要导出吗?类对象能创建了 但是调用函数不能调用, 也是上面那个错误
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
Unresolved external '_a' referenced form C:\...这个是什么错误
ccrun.com 2011-03-24
  • 打赏
  • 举报
回复
调用的时候需要这样声明一下
extern "C" __declspec(dllimport) int a;
__declspec(dllimport) class lines;

注意是dllimport
茹果伱在 2011-03-24
  • 打赏
  • 举报
回复
dll那边编译怎么是对的 到工程2这里调用就出错了
ccrun.com 2011-03-24
  • 打赏
  • 举报
回复
声明的时候:
__declspec(dllexport) class lines;

定义的时候就不用了:
class lines
{
public:
...
};

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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