2010-11-30 2 views
1

tlb-файл (с использованием regasm) сделан из dll (с использованием кода C#), и я могу использовать его в C++ с помощью #import. и все работает нормально. Есть ли способ, я могу использовать это на языке C? Я просто обнаружил, что #import имеет C++. Так, может кто-нибудь, пожалуйста, скажите мне, как я могу использовать в своей программе на C?Как использовать tlb-файл в C?

моя основная цель - использовать COM DLL, разработанную на C# в моей программе на C.

Благодаря & УВАЖЕНИЯ, ~ Кальвина

+0

я получаю c2773 error: #import и #using доступны только в компиляторе C++ – rplusg

ответ

7

COM программирование на C очень больно, но не невозможно. Однако доллар останавливается. Точка библиотеки типов должна иметь инструмент, автоматически генерирующий COM-интерфейс и объявления со-класса, чтобы вы могли использовать их в своем коде. Совсем аналогично файлу .h, но не зависит от языка. Эквивалент .NET - это метаданные в сборке.

Проблема в том, что инструмент не доступен для преобразования объявлений .tlb в C. Я уверен, что вы знакомы с #import, вот что используется в MSVC. Но он генерирует C++-код, интеллектуальные указатели, которые помогают вам создавать COM-объект, вызывать его методы интерфейса и обрабатывать ошибки. Если есть инструмент, который генерирует C, то это очень хорошо скрытый секрет.

Один трюк подскакивает, вы можете использовать OleView.exe, File + View TypeLib, чтобы просмотреть содержимое библиотеки типов. Это представление декомпилируется в IDL, языке определения интерфейса. Вы можете скопировать и вставить этот текст в файл .idl и скомпилировать его с помощью midl.exe с параметром командной строки/header. Это создает файл .h, который содержит как C++, так и C-объявления для интерфейсов. Вы должны закрыть вас, просто убедитесь, что библиотека типов достаточно стабильна, поэтому вам не нужно делать это очень часто.

+0

спасибо за понимание. И c файлы и h-файлы могут быть сгенерированы из oleviewer. Но когда я включаю тогда, я получаю много ошибок. Без разницы. – rplusg

+0

Просто эхом. Вы можете сказать, что хотите сделать это (COM с C), но вы этого не сделаете. – Joe

-2

Вы можете использовать regasm with /tlb option зарегистрировать типы в реестре Windows. После этого вы можете создавать свои экземпляры, такие как обычные вызовы COM из кода на C++.

Из MSDN:

When you specify the /tlb option, Regasm.exe generates and registers a type library describing the types found in the assembly. Regasm.exe places the generated type libraries in the current working directory or the directory specified for the output file. Generating a type library for an assembly that references other assemblies may cause several type libraries to be generated at once. You can use the type library to provide type information to development tools like Visual Studio 2005. You should not use the /tlb option if the assembly you are registering was produced by the Type Library Importer (Tlbimp.exe). You cannot export a type library from an assembly that was imported from a type library. Using the /tlb option has the same effect as using the Type Library Exporter (Tlbexp.exe) and Regasm.exe, with the exception that Tlbexp.exe does not register the type library it produces. If you use the /tlb option to registered a type library, you can use /tlb option with the /unregister option to unregistered the type library. Using the two options together will unregister the type library and interface entries, which can clean the registry considerably.

+0

спасибо за ответ, но я хочу использовать его с C, а не C++. Извините, если я не понимаю. – rplusg

0

Ни С, ни С ++ имеют директиву #import препроцессор.

+1

Это расширение Microsoft http://msdn.microsoft.com/en-us/library/8etzzkb6(VS.71).aspx – JeremyP

0

Я также столкнулся с той же проблемой, что нужно использовать TLB файл в C. И я думаю, что вы можете проверить ссылку ниже, которая помогает

How to call a COM component in C

Спасибо, sveerap

Смежные вопросы