DllImport на основе платформы ОС - PullRequest
2 голосов
/ 14 июня 2010

У меня есть смесь неуправляемого кода (backend) и управляемого кода (front end), поэтому мне нужно будет вызывать неуправляемый код из моего управляемого кода, используя методы взаимодействия и атрибут DllImport.

Теперь я скомпилировал две версии неуправляемого кода для 32- и 64-разрядных ОС; они названы service32.dll и service64.dll соответственно. Итак, в моем .Net коде, я должен был бы сделать DllImport для обеих библиотек:

[DllImport(@"service32.dll")]   //for 32 bit OS invocation
public static void SimpleFunction();

[DllImport(@"service64.dll")]   //for 64 bit OS invocation
public static void SimpleFunction();

И вызывайте их в зависимости от платформы, на которой запущено мое приложение.

Проблема теперь в том, что для каждой неуправляемой функции я должен объявить ее дважды, одну для 32-битной ОС и одну для 64-битной ОС. Это дублирование работы, и каждый раз, когда я меняю сигнатуру неуправляемой функции, мне приходится изменять ее в двух местах.

В любом случае, можно ли изменить аргумент в DllImport, чтобы в зависимости от платформы автоматически вызывался правильный dll?

1 Ответ

2 голосов
/ 14 июня 2010

Я не думаю, что DllImport поддерживает это, вы можете просто вызвать LoadLibrary и т. Д. Вручную.

Но взгляните на Параметризация DllImport для использования в приложении C # Ответы там также подойдут вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...