首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

发布CB程序解决思路

2012-02-06 
发布CB程序之前写了一个程序,使用DLL导出的Form做子Form,在程序发布时不能用静态编译连接来组合程序,发了

发布CB程序
之前写了一个程序,使用DLL导出的Form做子Form,在程序发布时不能用静态编译连接来组合程序,发了个帖,有位仁兄说是C++Builder的Bug,要我自己在程序中引入bpl,我经过摸索,终于成功,下面分享一下,如果觉得太cheap请见谅。

1   确定你的程序需要哪些bpl组件文件
1.1程序已经编译成功(当然是不使用静态连接)。
1.2打开C:\WINDOWS\system32\,将该目录下的所有bpl文件剪切到别的地方(不要把他们给彻底删除了,如果恢复不了,那C++Builder将不能运行,为什么要剪切掉这些文件呢?这样可以造成一个没用安装C++Builder的环境,如果在一台没装C++Builder机子上去试,试完后在去引入bpl文件,然后在试找下一个,当程序大时你要试很多次的,这样是比较麻烦的,那些只有一台机的就惨了)这时可运行你的程序,因为使用了动态连接,程序会到C:\WINDOWS\system32\目录下找它需要的bpl文件,因为我们刚才将他们剪切到别的地方,这时程序加载不到bpl文件就会报XXX.bpl文件加载不到的错误,这个XXX.bpl文件就是我们需要的文件了,将他拷贝到程序的工程目录下。
1.3将刚才剪切的bpl文件全部复制回C:\WINDOWS\system32\目录下,不然的话C++Builder将不能启动,因为他也要加载C:\WINDOWS\system32\目录下的bpl文件

2   在程序中引入bpl文件
在程序(如果是有主次程序的,在主程序中就可以了)的WinMain中加入以下代码
WINAPI   WinMain(HINSTANCE,   HINSTANCE,   LPSTR,   int)
{
                try
                {
                                  Application-> Initialize();

                                  THandle   PackageHandle1;
                                  PackageHandle1=LoadPackage( "VCL60.bpl ");   //加载bpl文件

                                  Application-> Title   =   "MyForm ";
                                  Application-> CreateForm(__classid(TForm1),   &Form1);
                                  Application-> Run();

                                  UnloadPackage(PackageHandle1);   //卸载bpl文件,一定要卸                      //载,不然的话退出程序时会有错误
                }
                catch   (Exception   &exception)
                ………..
              Return   0;
}

3   重复1-2步直到程序能运行为止,建议全部加载完之后到没有装C++Builder的机子上去测试一下,我不敢保证白份之百正确。这样编译的程序有时大小比静态编译的程序小得多的,大家可以试一试。关公面前耍大刀,献丑了。说得不对的请纠正。


[解决办法]
好,正好也在烦这个,顶,接分.
[解决办法]
顶,接分
[解决办法]
没什么大的意义吧,虽然编译的exe文件是小了,但附加的这些bpl文件可是不小。
[解决办法]
好,我试试。以前做的dll中如果有mdi窗体,子窗体的快捷键,tab键都不起作用了,必须在packge里打勾,应该是这个原因吧。

热点排行