GETMOBILEPOS_API BOOL GetPosResult(int * pID, LPSTR szMSID, LPSTR szLONG, LPSTR szLAT,
LPSTR szInRad,LPSTR szOutRad, LPSTR szStartAngle, LPSTR szStopAngle,
LPSTR szEndTime, LPSTR ErrCode, LPSTR szCenterLONG, LPSTR szCenterLAT);

这是VC的API函数,请问在C#中如何定义?如何调用此函数??

GETMOBILEPOS_API BOOL GetPosResult(int * pID, LPSTR szMSID, LPSTR szLONG, LPSTR szLAT,
LPSTR szInRad,LPSTR szOutRad, LPSTR szStartAngle, LPSTR szStopAngle,
LPSTR szEndTime, LPSTR ErrCode, LPSTR szCenterLONG, LPSTR szCenterLAT);
因为string类型无法匹配到LPSTR类型,对于int类型可以。如果想成功地匹配API,你应当使用LPWSTR,因为string类型是天生的宽字符集。
所以要修改的部分是API的定义。

事实上LPWSTR与BSTR能很好的转换到string。而LPSTR不行,如果你将API封装成ATL后,
通过引用COM来调用该API将不会有什么问题了。

因为.net 会负责将string类型与BSTR类型很好的转换。


事实上在引用API时,要注意人你引用的函数的参数类型要与COM支持的类型一致,否则会导致类型不匹配的问题,而且初看起来还感觉没有任何问题似的。
这个问题发生在我身上,我花了数天时间才找出原因.

  1如何调用带指针的VC API函数?先创建一个ATL库工程,然后添加一个ATL简单对象类。
  2如何调用带指针的VC API函数?代码如下:
  3如何调用带指针的VC API函数?//原始API定义如下,具体内容由开发决定。
  4如何调用带指针的VC API函数?#ifndef APIS__TEST
  5如何调用带指针的VC API函数?#define APIS__TEST
  6如何调用带指针的VC API函数?
  7如何调用带指针的VC API函数?GETMOBILEPOS_API BOOL GetPosResult(int * pID, LPSTR szMSID, LPSTR szLONG, LPSTR szLAT, 
  8如何调用带指针的VC API函数?LPSTR szInRad,LPSTR szOutRad, LPSTR szStartAngle, LPSTR szStopAngle, 
  9如何调用带指针的VC API函数?LPSTR szEndTime, LPSTR ErrCode, LPSTR szCenterLONG, LPSTR szCenterLAT)
 10

相关文章: