douzhantao2857 2017-10-03 09:42
浏览 107

CoCreateInstance返回E_INVALIDARG

I have been working on wrapping WindowsPortableDevice Api for Golang. The c++ code below was working but suddenly is not working.

libgowpd.h:

#include <Windows.h>

typedef struct IPortableDeviceManager IPortableDeviceManager;

HRESULT createPortableDeviceManager(IPortableDeviceManager **pPortableDeviceManager);

libgowpd.cpp:

#include <libgowpd.h>

HRESULT createPortableDeviceManager(IPortableDeviceManager **pPortableDeviceManager) {
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if (SUCCEEDED(hr)) {
        hr = CoCreateInstance(CLSID_PortableDeviceManager,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_PPV_ARGS(pPortableDeviceManager));
    }

    return hr;
}

In Golang

/*
#cgo CFLAGS: -blahblah
#cgo LDFLAGS: -llibgowpd -Ole32

include "libgowpd.h"
*/
import "C"

type HRESULT uint64
type IPortableDeviceManager C.IPortableDeviceManager

func CreatePortableDeviceManager() (*IPortableDeviceManager, error) {
    var pPortableDeviceManager *C.struct_IPortableDeviceManager// No matter whether C.IPortableDeviceManager or C.struct_IPortableDeviceManager

    hr := C.createPortableDeviceManager(&pPortableDeviceManager)

    if hr < 0 {
        return nil, HRESULT(hr)
    }
    if pPortableDeviceManager == nil {
        return nil, E_POINTER
    }

    log.Println("CreatePortableDeviceManager(): Create portable device manager instance.")

    return (*IPortableDeviceManager)(pPortableDeviceManager), nil
}

I think I pass pointer to pPortableDeviceManager correctly via getting address of pPortableDeviceManager but it returns 0x80070057 error code(E_INVALIDARG).

What have I done wrong?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
    • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
    • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛