Я не очень знаком с VB.net, но думаю, что это из-за разных правил приведения в C # и VB.NET.Ниже приведенный вами метод выглядит (в C ++):
virtual HRESULT __stdcall raw_RemoveExternalDocuments (
/*[in]*/ VARIANT DocumentNames,
/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;
Или лучше:
VARIANT_BOOL RemoveExternalDocuments (const _variant_t & DocumentNames );
C # требует использования BStrWrapper, потому что он сортирует строку как VARIANT, см. MSдокумент .И, похоже, VB.NET может сделать это неявно.