2015-04-13 9 views
0

Я пытаюсь импортировать DLL-файлы в моем проекте, я уже пытался «Добавить ссылку» и он не работает:Интеграция DLL в проект .Net

«ссылка * .dll не мог быть добавлен. убедитесь, что файл доступен, и что она является допустимой сборкой или COM-компонент»

Я пытался зарегистрировать DLL с помощью„regsvr32“и это не сработало:

«модуль * .dll был загружен, но точка входа DllRegisterServer был не найден»

, наконец, я использовал DllImport, (я в настоящее время тестирования с libclamav.dll)

lImport("libclamav.dll")] 
public static extern int cl_scanfile(String path); 
private void button1_Click(object sender, EventArgs e) 
{ 
string path="e:\\scan\\111.jpg"; 
int n; 
n = cl_scanfile(path); 
} 

, но у меня есть ошибки на исполнение:

«Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B) '

Любые предложения?

ответ

1

Похоже, вы хотите p/Вызывать методы в неуправляемой DLL. Вы должны прочитать через Platform Invoke Tutorial, предоставленный Microsoft, и посмотреть, помогает ли это.

  • Вы обычно добавляете ссылки только на другие управляемые сборки .NET. Если DLL, которую вы пытаетесь использовать, не является управляемой DLL, это, вероятно, не то, что вы ищете.
  • Обычно вы регистрируете только DLL с regsvr32, если собираетесь использовать COM API. Если DLL, которую вы пытаетесь использовать, не является COM-DLL, это, вероятно, не то, что вы ищете.
  • Вы p/Вызов, если вы пытаетесь использовать неуправляемую/не COM-библиотеку и хотите напрямую вызвать неуправляемые функции внутри нее. Вероятно, это то, что вы пытаетесь сделать на основе моего быстрого Google для libclamav.dll.

Если вы получаете исключение в неправильном формате, возможно, это связано с тем, что ваше приложение .NET нацелено на «Любой процессор», но DLL, которую вы пытаетесь загрузить, - это 32-разрядная DLL (и вы находитесь на 64-разрядная машина). Если это так, вам может потребоваться установить «Платформа целевой» вашего приложения .NET на «x86» и посмотреть, помогает ли это.

Чтобы успешно выполнить p/Invoke, вам также нужно иметь DLL, в которую вы звоните (и все ее зависимости) где-то в пути поиска. Самый простой способ обеспечить это - скопировать DLL и все зависимости в папку bin \ Debug или bin \ Release вашего приложения .NET и посмотреть, помогает ли это.

+0

Благодарим за быстрый ответ. Я попытался установить целевую платформу на x86 и получил ту же ошибку. –

+0

Я установил платформу для x64, и она работала без ошибок, спасибо вам большое. –