Aking,here!

annkie 2002-08-20 09:47:43
#include <windows.h>
#include "mylabel.h"
#pragma hdrstop
extern __declspec(dllexport)
bool __stdcall MySelDir(LPCTSTR Title,LPCTSTR Msg,LPTSTR Dir);
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
bool __stdcall MySelDir(LPCTSTR Title,LPCTSTR Msg,LPTSTR Dir)
{
Form1=new TForm1(NULL);
Form1->Caption =AnsiString(Title);
Form1->Edit1->Text =Form1->DirectoryListBox1->Directory;
Form1->Label1->Caption =AnsiString(Msg);
if(Form1->ShowModal()==mrOk)
{
strcpy(Dir,Form1->Edit1->Text.c_str());
delete Form1;
return true;
}
delete Form1;
return false;
}
调用的.cpp:
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
extern "C" __declspec(dllimport)
bool __stdcall MySelDir(LPCTSTR Title,LPCTSTR Msg,LPTSTR Dir);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char Dir[100];
if(MySelDir("dll demo"," select a directory",Dir))
{
MessageBox(Handle,("you have selected "+AnsiString(Dir)).c_str(),"dll demo",MB_OK);
}
}
...全文
75 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
annkie 2002-08-20
  • 打赏
  • 举报
回复
嗯,这一点很关键,要不我都不知道自己写dll干什么,谢谢Aking,我去给分了,也要回去了,晚安!
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
Dll中的输出函数当然是全局的,所有的应用程序当然都可以调用这些函数.我们用到的API函数都是放在Dll中。
annkie 2002-08-20
  • 打赏
  • 举报
回复
哦,所有的输出函数都是全局的?这也太好了,谁都可以用了.
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
你没有理解我的意思,我的意思是说:
void __fastcall TForm2::ShowMsg(char *Msg)
{
//这里不加任何代码
}
void __fastcall TForm2::ShowMsg(char *Msg)
{
ShowMessage("How to you");
}

我已经说过,因为原因就是输出函数是全局的函数。
annkie 2002-08-20
  • 打赏
  • 举报
回复
根本不理会我!太无耻啦.:)
annkie 2002-08-20
  • 打赏
  • 举报
回复
这下完蛋了,还没报错.我加了个form
class TForm2 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
void MyMsg(char* Msg);
__fastcall TForm2(TComponent* Owner);
};
dll的cpp:
void __stdcall MyMsg(char* Msg);
void __stdcall MyMsg(char* Msg)
{
ShowMessage(AnsiString(Msg));
}//很奇怪这里我原以为它会说MyMsg不是Form的成员函数,或者需要写成
TForm2::MyMsg(char* Msg)的形式.
SharpKing515 2002-08-20
  • 打赏
  • 举报
回复
学习!
annkie 2002-08-20
  • 打赏
  • 举报
回复
我看看.
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
呵呵,看来这个Dll还是挺有意思,编译器也没有报错,如果不是这个原因,应该与它是一个全局函数有关,如果是某一类的成员函数肯定不行,不信你试试。
annkie 2002-08-20
  • 打赏
  • 举报
回复
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
extern __declspec(dllexport)
void __stdcall MyMsg(char* Msg);
void __stdcall MyMsg(char* Msg)
{
ShowMessage(AnsiString(Msg));
}
//看来另有原因,没有报任何warning.
annkie 2002-08-20
  • 打赏
  • 举报
回复
好的,我去试试.
annkie 2002-08-20
  • 打赏
  • 举报
回复
这个问题就到这吧,刚才写帖子太快,才用了20分,太便宜啦,呵呵,我加点分给你:)
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
你注意,我说你这样写没有错的关键在于,你的声明是在DLL的入口点之前(即是说在DllEntryPoint之前),但如果你将它放在DllEntryPoint后,你看看,肯定会报“重复编译错误”.
annkie 2002-08-20
  • 打赏
  • 举报
回复
反正以后都使用你这种写法了,省得到时候出错了也不知道为什么.
annkie 2002-08-20
  • 打赏
  • 举报
回复
是阿,我真觉得奇怪,它也没有说重复申明,compile,make,build都ok,没有warning,真不明白.
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
我写Dll时,都是直接写出函数,我的理由就是:
函数是直接写在cpp文件,而且也是全局函数,所以你无需声明直接写出函数体就可以了,同时我也觉得这样简便。
你上面写法也没有错,所以我问你有没有出现函数重复声明。

annkie 2002-08-20
  • 打赏
  • 举报
回复
没有阿,而且调用运行正常.
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
你上面的写法在编译时提示“函数重复声吗?”
annkie 2002-08-20
  • 打赏
  • 举报
回复
但我有个dll是这样写的:
//....
extern "C" __declspec(dllexport)
void __stdcall MyShowMsg(char* Msg);
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void __stdcall MyShowMsg(char* Msg)
{
ShowMessage(Msg);
return;
}我看不出跟刚才函数的区别?
kingcaiyao 2002-08-20
  • 打赏
  • 举报
回复
一不小心,还没有写完就提交了。
不好意思。
是这样,本身函数是直接写在cpp文件,而且也是全局函数,所以你无需声明直接写出函数体就可以了。
加载更多回复(8)

13,873

社区成员

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

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