文档介绍:事先声明:本来想放弃编程, 却由于生活所迫不得不重操旧业, 我是一个VC的初学者, 初级到刚编写VC大概一个月,此文档只是我由于工作中遇到客户使用公司的产品遇到一些麻烦, 由于个人兴趣编写了一个简单的ActiveX ponent 组件, 期间遇到了一些问题, 网上找到的资料不是不完整就是错误的, 所以我才计划写这个文档。此文档为公开的word文档, 如修改内容请先验证。
文档内容:时遇到的一些问题, 如:带返回值的接口如何声明, COM如何加载调用DLL和DLL内的函数,BSTR 互相转换LPCTSTR, ASP, C#如何调用等, 如果你没有遇到这些问题可略过。
1,建立工程,如下图所示
完成(下图)。
加入 ATL Object
选择: ActiveX ponent,
下一步:
ASP页:默认如图, 由于不需要这些东西, 我把他们去掉了。
完成之后如下图:
方法声明
下一步:
这里最后一个参数:BSTR *res 就是用来输出返回值的,返回字符串。前面要加上[out,retval]. 完成之后如下:
加入代码:如下Dll加载和函数声明部分:
在type 定义调用指针的时候, 要加入(_stdcall 或者其他如:WINAPI)(我找到的网上的实例此处没有说明), 这个是根据你加载的DLL中的函数声明原型定的, 这个DLL是我自己封的, 用的是: _stdcall。 LoadLibrary()返回一个 HINSTANCE 结构的指针,需要事先定义, DLL路径由系统从程序执行目录开始查询。
函数体:
BSTR转 LPCTSTR, 看上图:
_bstr_t _bstrn(ame);
nam =_bstrn;
_bstr_t _bstrp(accpwd);
pwd =_bstrp;
需要加入:#include ""
错误:nam=(LPCTSTR)ame, 经过验证这样写是错误的,虽然编译可以通过,但asp和c#调用会返回非自己定义的错误的返回值,
LPTSTR 转 BSTR