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支持的类型一致,否则会导致类型不匹配的问题,而且初看起来还感觉没有任何问题似的。
这个问题发生在我身上,我花了数天时间才找出原因.
2
3
4
5
6
7
8
9
10