2013-04-10 5 views
1

Я пытаюсь контролировать видеопамять для высокопроизводительной программы.Невозможно импортировать Visual Studio C++ DLL в Visual Studio C# Project в Windows

Поэтому я использовал библиотеки NVIDIA CUDA в приложении Visual Studio для C++ для сбора необходимых мне данных.

К сожалению, мне нужен пакет, который можно использовать с Ruby, C# и инструментами тестирования программного обеспечения, которыми располагает моя компания.

Итак, я решил скомпилировать C++ DLL и импортировать его в C# Visual Studio Project для тестирования.

Я смог скомпилировать DLL, но импорт его в мою программу Visual C# был проблемой.

I right Нажмите на ссылку -> Добавить ссылку. Затем я нажимаю на вкладку «Обзор» и просматриваю местоположение моей DLL; «TestProgram.dll», и я нажимаю «OK»

Затем я получаю следующее сообщение об ошибке «Ссылка на C: .... не может быть добавлена. Убедитесь, что файл доступен, и что это действительная сборка или COM-компонент ».

Что я пробовал: 1. Импортирование DLL из нескольких разных мест в моей системе. 2. Перемещение библиотеки DLL в мой обозреватель решений и ее импорт 3. Использование метода «Вызов»: [DllImport («PathToMyDll»)] 4. Использование метода «Вызов» только с моим именем DLL. 5. Набрав «использование» пути к моей DLL 6. Экспорт DLL как файла .lib вместо

Что я делаю неправильно? Я думал, что если я экспортировал DLL с помощью Visual Studio 2010, то, конечно же, эту же DLL можно было бы добавить в проект Visual Studio 2010.

+0

попробуйте взглянуть на него с помощью ходунки зависимостей? Он должен помочь вам лучше диагностировать проблемы с dll. –

ответ

1

Ну, это действительный сборный или COM-компонент? Просто потому, что это C++ DLL, это не значит, что его можно использовать только с ссылкой, на самом деле большинство не может. Это должна быть управляемая DLL или COM-объект. Если это ни один из них, вы должны вызвать неуправляемый код из управляемой сборки. Это означает определение каждой функции в заглушке.

Больше информации здесь: how to call a C++ dll exported function from c#

Имейте в виду, вы также должны иметь дело с 64/32 битными проблем, так как если DLL скомпилирован для 32 бит, вы не можете использовать его в 64 битном приложении.

+0

Спасибо за информацию. Я посмотрел на попытку создания управляемой DLL. В процессе, однако, я нашел решение, которое было значительно проще реализовать и выполняет эту работу.Я сохраню решение, которое вы дали для будущей справки, в случае, если я хочу попробовать еще раз. –

0

Я нашел решение этой проблемы. CUDA создает проект Windows Console Application. Таким образом, решение было просто использовать это вместо DLL.

Это хорошо сработало, потому что Ruby, Test Complete и Visual C# могут считывать выходные данные из базовой .exe-консоли (с некоторой работой).

Скомпилированный exe простой. Все, что мне нужно сделать, это передать целое число в качестве аргумента при запуске программы, и программа получит нужные мне данные с моей карты NVIDIA.

Задача теперь будет найти хороший способ взаимодействия с .exe.

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