让我首先声明,我不是一个COM开发人员。我知道标准的C++、C#和Java。
我有一个C#库,它将从托管C++调用。我使用Visual 2010 -> TypeLib中的MFC类添加了TypeLib类。但是,自动生成的C++类不编译。显然缺少了一条返回语句。我该怎么解决这个问题?我真的很感激你的帮助。
图书馆C#类
[Serializable]
[
ClassInterface(ClassInterfaceType.AutoDual),
ProgId("Response")
]
public class Response
{
public static readonly int NUM_DATA = 6;
public Response()
{
data = new Data[NUM_DATA];
for (int i = 0; i < NUM_DATA; ++i)
{
data[i] = new Data();
}
}
private Data[] data;
public Data[] Data
{
[return: MarshalAs(UnmanagedType.SafeArray)]
get
{
return data;
}
}
}托管C++生成类
class CResponse : public COleDispatchDriver
{
public:
CResponse(){} // Calls COleDispatchDriver default constructor
CResponse(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
CResponse(const CResponse& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}
// _Response methods
public:
SAFEARRAY * get_Data()
{
InvokeHelper(0x60020004, DISPATCH_PROPERTYGET, VT_EMPTY, NULL, NULL);
}
}发布于 2012-04-25 23:06:00
这个问题似乎有三种解决办法。第一种方法是将返回数组作为函数的参数。就像这样:
CustomData[] getCustomDataArray();
void getCustomDataArray(out CustomData[]);第二个选项是编写一个函数来访问数组,而不是使用整个过程。
CustomData getCustomDataAt(int index);
void setCustomDataAt(int index, CustomData data);最后一个选项是更改MarshalAs属性。我将使用第一个选项,因为它似乎是最普遍接受的解决方案。希望这对其他人有帮助。
https://stackoverflow.com/questions/10289172
复制相似问题