10 个解决方案
#1
把窗体句柄,用参数的方式传递给 DLL 中的函数,不就可以了?
#2
就显示一个控件?
#3
创建包含VCL组件的DLL
DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
这个对话框DLL的代码如下:
这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。
DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
这个对话框DLL的代码如下:
这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。
#4
图片见http://www.bccn.net/Article/kfyy/cjj/jc/200512/2662.html
#5
楼主的意思是,光秃秃的只显示一个button。
#6
是不是需要弄个透明窗体呀
#7
哈哈 有意思、
#8
创建一个子窗体(如Button或Edit),然后将用API:SetParent将其父窗体设置成桌面即可。
#9
先Create一个label或者edit控件,其父指针可以为空,或者为桌面
m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置
m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置
#10
上面是在屏幕上显示一个button,label或者edit控件也是类似的
#1
把窗体句柄,用参数的方式传递给 DLL 中的函数,不就可以了?
#2
就显示一个控件?
#3
创建包含VCL组件的DLL
DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
这个对话框DLL的代码如下:
这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。
DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。
这个对话框DLL的代码如下:
这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
要注意的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。
#4
图片见http://www.bccn.net/Article/kfyy/cjj/jc/200512/2662.html
#5
楼主的意思是,光秃秃的只显示一个button。
#6
是不是需要弄个透明窗体呀
#7
哈哈 有意思、
#8
创建一个子窗体(如Button或Edit),然后将用API:SetParent将其父窗体设置成桌面即可。
#9
先Create一个label或者edit控件,其父指针可以为空,或者为桌面
m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置
m_btn.Create("按钮",WS_CHILD | BS_DEFPUSHBUTTON,CRect(0,0,100,100), NULL,123);
m_btn.ShowWindow(SW_SHOWNORMAL);
m_btn.MoveWindow(0,0,200,50); //移动到你要的屏幕上的位置
#10
上面是在屏幕上显示一个button,label或者edit控件也是类似的