勿在浮沙筑高台:一次动态库调用的经历
最近公司需要利用动态库针对储物柜进行控制,要得比较急。于是着手开发,动态库提供的版本是VC7.0,而且是导出类。
之前自己从来没有做过关于导出类的开发,只是调用DLL中的函数而已。
1.首先尝试用Delphi直接调用DLL中的导出类,遇到如下困难:
Delphi中没有VC中对应的导出类关键字
Delphi中没有与MFC类CString对应的类,无法作为参数传进去
基于以上两个原因,此方案作废;
2.然后尝试用VC6.0对DLL库进行开发,遇到如下问题:
虽然按照说明文档进行开发,但总是会报错unresolved external 2001
无奈之下突然想起说明文档中提到开发平台为vc7.0 !-_-
3.最后尝试安装vs2003进行开发,终于正常调用了开发包里的库函数!
但是,如何将VC7.0的DLL库在Delphi中调用呢?
于是我想到了再做一个DLL库来代理原来VC7.0的库的功能,提供Delphi可调用的接口
接下来就是在在浮沙筑高台的过程了:
VC中的几个字符串:
在CString LPCSTR LPCTSTR Char* BSTR之间颠来倒去的转换,返回给Delphi PChar或者String使用,
却总发现Access Violation,
最终惊奇的发现,原来是自己没有为变量申请内存空间,导致越界.
在无数次谷歌搜索之后,终于碰到了问题的答案...
突然发现自己基础原来这么差,本来很简单的问题却需要花如此多的功夫来做,不是科班出身的弊端在此刻显露无疑,自己这种瞎猫棚子耗子的做法不止效率低下,而且容易出问题,值得深思.
浙公网安备 33010602011771号