Создание неуправляемого класса из .NET - PullRequest
3 голосов
/ 19 августа 2010

Я нахожу через Google множество примеров того, как вызвать функцию API в неуправляемой DLL из кода .NET, но как насчет создания объекта из этого неуправляемого кода?

В настоящее время я работаю со старым унаследованным приложением на работе (и я все еще не уверен, что мы сможем что-то с этим сделать, но я должен возиться и исследовать), что компания хочет перейти на .СЕТЬ. Похоже, что это было сделано раньше, и я просматриваю это сейчас. Наиболее распространенные ошибки компиляции - это ссылки на старые библиотеки DLL, которые проект не понимает.

Пример строки кода в этом будет:

Dim cAccounts As HSVMETADATALib.HsvAccounts

В проекте имеется неверная ссылка на библиотеку, которая, как мне кажется, является результатом некоторой попытки мастера просто перенести какой-то предварительный проект .NET на .NET. У меня есть DLL, которую он ищет, но добавление ссылки на него возвращает ошибку:

Ссылка на 'HFMConstants.dll' не может быть добавлена. Убедитесь, что файл доступен и является допустимым компонентом сборки или COM.

Теперь я ничего не знаю об этой DLL. И у меня очень небольшой опыт программирования до Windows. Поэтому я искал в Интернете информацию об использовании старой библиотеки DLL в этом коде, и все это сосредоточено на вызове функций API внутри библиотеки DLL. Однако, просматривая этот код, вы узнаете не столько о функциях API, сколько об объектах. Так как же мне создать экземпляр одного из этих объектов?

(Имейте в виду, что это одна из тех ситуаций, когда мы даже не знаем, есть ли у нас правильный исходный код, нет документации, ничего о владении и обслуживании этого приложения не было создано до конца. Но это одно препятствие возможность создания экземпляров объектов из внешних библиотек DLL, которые являются неизвестными и потенциально недоступными в данный момент сторонним источником, позволит сократить большинство ошибок компилятора и поможет нам получить немного больше информации о коде, возможно, даже получить урезанную версию хотя бы компилируемой.)

Это неопределенно, но стоит спросить:)

Ответы [ 3 ]

3 голосов
/ 19 августа 2010

Я предлагаю вам попробовать открыть DLL с помощью Dependency Walker . Это должно дать вам больше информации о внутренностях и API DLL.

Смотрите также:

Ссылка на не-CLR DLL
http://illuminatedcomputing.com/blog/?p=44

1 голос
/ 19 августа 2010

Вам нужно будет попытаться узнать больше информации об этой DLL. Например, если это COM-объект, вы можете создать строго типизированную управляемую оболочку, которая позволит вам использовать его, используя tlbimp.exe . Если это стандартная библиотека Win32, вам необходимо выяснить, предоставляет ли она некоторые функции, каковы их имена и аргументы, чтобы PInvoke их. Вы можете использовать dumpbin.exe , чтобы просмотреть список экспортированных имен функций.

0 голосов
/ 19 августа 2010

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

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

...