Я использую COM Interop. У меня есть вызов в VB6, который возвращает строку примерно 13000 символов. Если я выполняю вызов в чистом VB6, это займет около 800 мсек. Если я выполню это через c # и COM Interop, это займет около 8 секунд. Я предполагаю, что задержка вызвана маршалингом.
Если я прав насчет маршалинга, я был бы благодарен, если бы кто-нибудь мог предложить самый быстрый способ, которым я могу получить это в C #. например Будет ли лучше
а) выставить его как байтовый массив
b) предоставить параметр строки byref в слой VB6
Буду признателен также за пример кода. Я попробовал
Marshal.PtrToStringAuto(Marshal.ReadIntPtr(myCOMObject.GetString, 0)
безрезультатно.
-
Исходя из комментария Франси. Я просто ссылаюсь на VB6 DLL (так в процессе) из C # DLL. Вот выдержка из OLEView
interface _MyCOMObect : IDispatch {
...
[id(0x60030006)]
HRESULT GetString(
[in] _IEventHistory* p_oEventHistory,
[out, retval] _IXML** );
...
};
[
uuid(09A06762-5322-4DC1-90DD-321D4EFC9C3E),
version(1.0),
custom({17093CC6-9BD2-11CF-AA4F-304BF89C0001}, "0")
]
coclass MyCOMObject {
[default] interface _CFactory;
};
[
odl,
uuid(C6E7413F-C63A-43E4-8B67-6AEAD132F5E5),
version(1.0),
hidden,
dual,
nonextensible,
oleautomation
]
Я, вероятно, должен указать, что параметр (p_oEventHistory) - это еще один COM-объект, который я создаю в C #, но это занимает около 80 мс
S