我需要通过类似 COM 的接口访问 COM dll 中的 C# 方法。其中一种方法需要将字符串数组作为输入传递。
我正在创建一个 SAFEARRAY 并将其传递给 COM Interop。但是,这似乎不起作用,因为我在互操作层中看到了一个异常。(System.Runtime.InteropServices.SafeArrayTypeMismatchException)。
显然,预期的类型似乎有所不同。
在此处粘贴代码:
要调用的 C# 方法:
public long DoIt3(int nFiles, string[] fileNames);
调用相同的 C++ 代码:
int _tmain()
{
TCHAR *fileNames[128] = { TEXT("C:\\Program Files\\IBM\\RTC.NET"),
TEXT("C:\\KIRAN\\Work\\RFT"), TEXT(".\\bin\\Debug") };
SAFEARRAY *pSA = CreateSafeStringArray(3, fileNames);
_tprintf(TEXT("%d"), pIManaged->DoIt3(3, pSA));
SafeArrayDestroy(pSA);
}
static SAFEARRAY *CreateSafeStringArray(long nElements, TCHAR *elements[])
{
SAFEARRAYBOUND saBound[1];
saBound[0].cElements = nElements;
saBound[0].lLbound = 0;
SAFEARRAY *pSA = SafeArrayCreate(VT_VARIANT, 1, saBound);
if (pSA == NULL)
{
return NULL;
}
for (int ix = 0; ix < nElements; ix++)
{
VARIANT v;
VariantInit(&v);
v.vt = VT_BSTR;
v.bstrVal = elements[ix];
long rgIndicies[1];
rgIndicies[0] = ix + saBound[0].lLbound;
HRESULT hr = SafeArrayPutElement(pSA, rgIndicies, &v);
_tprintf(TEXT("%d"), hr);
VariantClear(&v);
}
return pSA;
}
欢迎任何想法/建议。