Я использую Visual Studio 2008 для создания Решения с двумя Проектами: Консольное Приложение C# и DLL C++. Я хочу, чтобы приложение вызвало функцию от dll, использующего P/Invoke. Поэтому я пытаюсь добавить dll как Ссылку на приложение C#. Но когда я пробую команду Add Reference, Visual Studio не позволит мне сделать это, если я не установил свойство сброса / на dll (в соответствии с Конфигурацией Properties:General). Теперь, я думал, что P/Invoke мог обработать простой win32 dlls. Действительно, если я создаю свой dll без сброса / и просто копирую его вручную в мусорное ведро/Отладку, затем прекрасное выполнение приложения. Итак, почему сброс / требуется добавить dll как ссылку? И если VS не позволит мне добавить его, есть ли некоторое (чистое) обходное решение так, чтобы мое приложение нашло dll?
Я вижу, что у кого-то была подобная проблема здесь (хотя со сторонним dll): Не мог добавить Ссылку DLL на VS 2008 ответ, который он получил, должен был создать обертку. Но это не действительно необходимо, так как приложение может использовать dll очень хорошо; это - просто Добавить Ссылочный шаг, который не работает. И кроме того, разве обертка не кодирует, нуждаются в ссылке на dll, повышая ту же проблему как прежде? Я действительно хотел бы ответ, который не включает запись обертки вообще.
Почему бы просто не добавить шаг после сборки, чтобы скопировать неуправляемую библиотеку DLL в каталог проекта? Вам не нужна "ссылка", чтобы иметь возможность ссылаться на неуправляемую DLL, и похоже, что единственная проблема, с которой вы сталкиваетесь - это то, что файл не копируется автоматически в путь поиска.
При использовании PinVoke на C ++ DLL не нужно добавлять ссылку. Ссылки необходимы только тогда, когда вы звоните управляемым кодом в другой DLL. Просто поместите C ++ DLL в тот же каталог и добавьте его имя в атрибут DLLIMPORT
Теоретически вы можете добавить C ++ - DLL в качестве связанного ресурса к вашему C # -DLL. Это сделало бы .NET копировать вашу C ++ - DLL, где это копирует C # -DLL даже в GAC. Теоретически означает, что есть некоторые недостатки:
Итак, если ни одно из вышеперечисленного не является ними для вас, вы можете позвонить в CSC.exe следующее:
csc.exe ... /linkresource:cpp.dll
Надеюсь, это может помочь!