2013-06-11 3 views
1

Я зарегистрировал COM DLL в соответствии с этим руководством - http://cppkid.wordpress.com/2009/01/02/how-to-call-a-managed-dll-from-unmanaged-code/. Я создал файл snk, скопировал его в папку решения (файл решения находится в исходной папке), и после создания dll я зарегистрировал его успешно с помощью команды regasm (с опцией/без/console). Но использовать его использовать в приложении мне нужно PublicKeyToken, но когда я называюsn.exe не удалось найти мою зарегистрированную управляемую dll

sn -T MyDLL.dll 

или

sn -T MyDLL.tlb 

, результат:

Failed to read MyDLL.dll -- The system cannot find the file specified. 

Я даже попытался вывести файлы dll и tlb, где находится мой snk-файл, но результат тот же. Я использую Windows 7 x64 и .NET 4.0. Спасибо заранее.

+0

Подход номер один - использовать вариант Regasm.exe/codebase, так что это необязательно. Подход номер два заключается в использовании IDE, поэтому все это автоматически выполняется, не будучи убитым небольшими ошибками, такими как неправильный каталог по умолчанию. Project + Properties, вкладка Signing. Нажмите F1, если вам нужна дополнительная помощь. –

+0

С опцией «/ console» «Я имел в виду/codebase. Я не знаю, почему я написал «консоль». как @vcsjones сказал, что я забыл полный путь, но теперь результат команды sn: 'MyDLL.tlb не представляет собой сильно названную сборку Я пытаюсь установить тип менеджера домена с помощью ' clrControl-> SetAppDomainManagerType (L («mydll, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = ???, processorArchitecture = MSIL»), L («mydll.AppDomainManager»)) ' , но я не могу найти PublicKeyToken. Таким образом 'clrControl-> SetAppDomainManagerType (L (« mydll »), L (« mydll.AppDomainManager »))' он работает :) Спасибо вам обоим за помощь. –

+0

Вы не можете назвать имя библиотеки типов, только сборкой. DLL, а не TLB. Вы не хотите использовать Regasm для регистрации этой DLL в этом случае, ICLRControl :: SetAppDomainManagerType() не требует этого. Опасайтесь DLL Hell с помощью ярлыка, который вы нашли. Вы все это немного перепутали :) –

ответ

0

sn ожидает, что можно найти MyDLL.dll в пути. Не имеет значения, является ли он COM или нет, или если он зарегистрирован. Вероятно, вы хотите сделать что-то вроде этого:

sn -Tp C:\full\path\to\your\assembly\MyDLL.dll 
Смежные вопросы