勿在浮沙筑高台:一次动态库调用的经历

最近公司需要利用动态库针对储物柜进行控制,要得比较急。于是着手开发,动态库提供的版本是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,

最终惊奇的发现,原来是自己没有为变量申请内存空间,导致越界.

在无数次谷歌搜索之后,终于碰到了问题的答案...

 

突然发现自己基础原来这么差,本来很简单的问题却需要花如此多的功夫来做,不是科班出身的弊端在此刻显露无疑,自己这种瞎猫棚子耗子的做法不止效率低下,而且容易出问题,值得深思.

 

 

posted @ 2009-04-14 22:04  Rockiebond  阅读(313)  评论(0)    收藏  举报