挖井

类库大魔王的挖井日记

挖一口属于自己的井


静态链接Scintilla

  自从大致了解了Scintilla后,就喜欢上了这个控件,一般的用法照它文档和代码中写的,只要LoadLibrary那个dll,就可以直接使用"Scintilla"为类名创建窗口了。这两天发现XML Spy也用了Scintilla,并且没有看到那个dll文件,猜想应该是静态链接进去了,所以我也想试试。
  首先,当然是下载源代码,现在最新的是1.7.5版了。然后有个VC的工程文件,其实是编译出dll来的,用makefile也只能编译出dll来。要用VC自己新建一个lib静态库工程,把include、src、win32三个文件夹下的所有.h、.cxx、.rc、.cur文件都添加进来。再到项目属性里设置一下,使用多线程库。这样就能编译出一个.lib文件来了,Debug版有4MB多,Release版是3MB多。
  试用一下这个新建出来的lib文件,正常创建一个工程,用的时候不用LoadLibrary了,要调用Scintilla_RegisterClasses函数,看ScintillaWin.cxx文件最后的DllMain就知道了,当然这个函数并没有在公司的头文件里声明,所以调用前自己声明一下。然后强制链接前面生成的那个lib文件,假设Release版的名为SciLexerS.lib,对应Debug版的名为SciLexerSD.lib,这时就可以编译了,在链接的时候可能会报一堆Imm打头的函数没法链接,很easy了,强制链接imm32.lib文件就可以了。
  其实相比动态链接,静态链接除了发布的文件少了一个之外,没有任何优势,反正dll倒是可以由用户任意更换,有了新版本,只要替换一下dll文件就可以了,即使如果是个通用的代码编辑器,假如新版中增加了对新的语言的支持,除了替换dll文件,再更新一下配置文件就可以了。

本文地址:

https://minidump.info/blog/2007/11/e9-9d-99-e6-80-81-e9-93-be-e6-8e-a5scintilla/

上一篇

Compile Boost::Regex with ICU by VC7.1

  Boost中的Regex需要编译后才能使用,这让人觉得有点难过,而且相比Greta,Boost::Regex居然默认是不能直接支持宽字符的,而且有个同事在那里抱着快是10年前的性能比较结果,说Greta比Boost::Regex好,真是让我觉得很不爽啊。  不过不爽归不爽,有些固有的缺陷我...…

CPPOOPGPXP 全文阅读
下一篇

使用CruiseControl进行持续集成

  其实我根本不懂什么叫持续集成,为什么要每日构建,但是我还是很喜欢用CruiseControl,我喜欢让它能为我写的每一个程序都构建一个项目。其实我也根本没怎么利用CruiseControl的多少功能,我只是让它在我点击按钮时从VSS中下载源代码编译最后打包而已。  今天下午花了大概2、3个...…

CPPOOPGPXP 全文阅读