COM中的一个方法,用VC调用正确,C#调用出错,搞不懂?该怎么处理

COM中的一个方法,用VC调用正确,C#调用出错,搞不懂?
在暴露的方法中,直接调用一个类的方法,该方法主要是获取主板编号信息,内容如下:
INT CWMI::WMI_DeviceQuery( INT iQueryType, T_DEVICE_PROPERTY *properties, INT iSize )
{
HRESULT hres;
INT iTotal = 0;
// 判断查询类型是否支持
if( (iQueryType < 0) || (iQueryType >= sizeof(szWQLQuery)/sizeof(T_WQL_QUERY)) )
{
return -1; // 查询类型不支持
}
    // 初始化COM
   hres = CoInitialize( NULL); 
    if( FAILED(hres) )
    {
        return -2;
    }

    // 设置COM的安全认证级别
hres = CoInitializeSecurity( 
NULL, 
-1, 
NULL, 
NULL, 
RPC_C_AUTHN_LEVEL_DEFAULT, 
RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE,
        NULL
);
    if( FAILED(hres) )
    {
        CoUninitialize();
        return -2;
    }    
    // 获得WMI连接COM接口
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance( 
CLSID_WbemLocator,             
        NULL, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator,
reinterpret_cast<LPVOID*>(&pLoc)
); 
    if( FAILED(hres) )
    {
CoUninitialize();
        return -2;
    }
    // 通过连接接口连接WMI的内核对象名"ROOT\\CIMV2"
IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(
         _bstr_t( L"ROOT\\CIMV2" ),
         NULL,
         NULL,
         NULL,
         0,
         NULL,
         NULL,
         &pSvc
 );    
    if( FAILED(hres) )
    {
pLoc->Release(); 
        CoUninitialize();
        return -2;
    }

    // 设置请求代理的安全级别
    hres = CoSetProxyBlanket(
pSvc,
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_NONE,
NULL,
RPC_C_AUTHN_LEVEL_CALL,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE
);
    if( FAILED(hres) )
    {
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return -2;