У меня есть .Net asm с несколькими интерфейсами и классами, доступными для COM с использованием атрибута [ComVisible (true)].Я генерирую tlb, а затем ссылаюсь на это в моем файле StdAdx в компоненте C ++ COM.Что странно, так это то, что по какой-то причине, несмотря на то, что базовый intellisense (VS6 для C ++) может видеть мои свойства и методы, я получаю ошибки компилятора, утверждающие, что они не являются членами.Например:
[Guid("88E58BE4-E0CB-4d1b-9553-A5431E7A0BEA")]
[ComVisible(true)]
public interface ISupplierPayment : IBusinessObjectPersist
{
String Comment
{
get;
set;
}
И в сгенерированном tlh в c ++:
struct __declspec(uuid("e94bd31e-327c-33c8-8a55-b693ccf1ed96"))
struct __declspec(uuid("e94bd31e-327c-33c8-8a55-b693ccf1ed96"))
ISupplierPayment : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall get_Comment (
BSTR * pRetVal ) = 0;
И, наконец, ошибка при попытке использовать это в коде:
D: \MR ... File.cpp (647): ошибка C2039: «Комментарий»: не является членом «ISupplierPayment» d: \ mr ... projectdir \ release \ TheDotNetClasses.tlh (758): см. Объявление «ISupplierPayment»
Есть идеи, на что мне смотреть дальше?если он в tlh и intellisense распознает его и он есть в OLEView на tlb, я не уверен, что может быть не в порядке .. заранее спасибо за просмотр
UPDATE Еще один пример связанной проблемы: C #
[Guid("3BE93D52-86B7-42e6-BAE6-29037F6BC9C4")]
[ComVisible(true)]
public interface IDataStoreFactory
{
void TestMethod(String test);
C ++ TLH
struct __declspec(uuid("3be93d52-86b7-42e6-bae6-29037f6bc9c4"))
IDataStoreFactory : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall TestMethod (
BSTR dataStoreAssembly ) = 0;
void TestMethod(String test);
Вызов метода C ++
spDataStoreFactory->TestMethod("test");
Ошибка компиляции C ++
'TestMethod': невозможно преобразовать параметр 1 из' char [5] 'в "unsigned short *" Указанные типы не связаны;для преобразования требуется reinterpret_cast, приведение в стиле C или приведение в функциональном стиле
Ха !?это не коротко, это BSTR ... очень растерянный