Мои проблемы с C # и DLL - PullRequest
       19

Мои проблемы с C # и DLL

4 голосов
/ 15 апреля 2010

Я пытаюсь узнать, можно ли получить данные из DLL. Я провел некоторое исследование и обнаружил, что вы можете хранить ресурсы приложения в DLL. То, что я не мог найти, была информация, чтобы сказать мне, как это сделать. Есть статья в MS, в которой объясняется, как получить доступ к ресурсам внутри сателлитной DLL, но я, честно говоря, не знаю, ищу ли это именно это. http://msdn.microsoft.com/en-us/library/ms165653.aspx Я попробовал некоторые из задействованных кодов, но есть некоторые «FileNotFoundExceptions».

Появляется остальная информация DLL: классы, объекты и т. Д. Я просто добавил DLL в качестве ресурса в свой проект Visual Studio и добавил его с помощью «using». Я просто не знаю, как это понять, если это возможно.

Ответы [ 4 ]

1 голос
/ 15 апреля 2010

Если dll .net, вы можете использовать отражение.

Using System.Reflection;

....
Assembly A= Assembly.LoadFrom(YouDllFileName);

string[] STA;

STA= A.GetManifestResourceNames();

// STA contains all the resource names in the dll
...
// to extract them
Stream str= A.GetManifestResourceStream(STA[I]);

// then, you can make that stream became a file if you wish

Вы также можете извлечь ресурсы сборки .net с помощью ildasm

0 голосов
/ 26 апреля 2010

Существует два типа DLL.

  • Управляемая dll - dll, написанная на любом языке .net (например, csharp)
    Предоставленная вами ссылка работает с управляемыми dll.
  • Неуправляемый dll - классический c / cpp dll.
    в этом случае вам необходимо установить связь между управляемым (ваш код) и неуправляемым.

Чтобы узнать, какой тип вашей dll , вам нужно добавить эту dll в качестве ссылки.
В Visual Studio откройте проект, щелкните правой кнопкой мыши по ссылкам (в Solution Explorer).
Затем "Добавить ссылку" -> Обзор-> Добавить свою DLL.
Тогда в ссылках, вы можете увидеть свой dll.
Щелкните правой кнопкой мыши на нем и добавьте вид в Object Browse.
Если вы видите что-то вроде класса "c" внутри пространства имен "b", вы работаете с управляемой dll.
В Object Browser вы можете многое узнать о вашей dll (возможно, это важнее, чем просто извлечь ресурсы)

В этот момент вы можете поступить так, как вам отвечает «Даниэль Долз».

0 голосов
/ 16 апреля 2010

Поскольку вы говорите, что можете добавлять DLL в директиву using, вы, вероятно, можете использовать методы, предоставляемые DLL. Если у вас нет документации по DLL, вам, возможно, придется просто попробовать использовать объектный браузер, чтобы увидеть, что он может предложить.

предположить:

using MyDll;

вы должны уметь вызывать методы, подобные этим:

string x = MyDll.SomeType.GetValue();

это то, что вы спрашивали?

0 голосов
/ 15 апреля 2010

Я не совсем уверен, с чем вы можете столкнуться, основываясь на вашем описании, но пара общих указателей ...

Если вы пытаетесь найти файлы, которые вы добавили в проект, вы делаете это:

Щелкните правой кнопкой мыши ресурс в обозревателе решений, выберите свойства и установите для параметра «Действие сборки» значение «Встроенный ресурс».

Для строк и значков добавьте файл .resx в проект и вставьте их туда. Если это то, что вы делаете и все еще сталкиваетесь с проблемами, проверьте действие Build.

...