Вот моя проблема. Я обертываю C dll в С#. Для этого я сначала пишу обертку С++/CLI. Собственная библиотека C связана с оболочкой С++/CLI. (Свойства Linker в проекте С++/cli).
Вот как это все организовано сейчас: - Нативный C.lib: оба x86 и 64bit.
- 1 решение, содержащее 2 проекта:
- Проект оболочки С++/CLI, с которым связан родной C.lib
- Проект С#, ссылающийся на проект С++/CLI
Моя проблема возникает из-за того, что мне нужен С# для задания "Любой процессор". Но этот параметр недоступен в С++/CLI, поскольку он компилируется непосредственно на собственный код.
Моя идея решить это: - Скомпилируйте С++/CLI-оболочку в x86, а затем измените конфигурацию и скомпилируйте ее до 64 бит. Когда он компилируется, я хотел бы сказать, какую DLL следует использовать на платформе. т.е.: если компилировать в 64-битную, ссылку 64-битный родной C dll, иначе, если x86, ссылка x86 native C. - После этого я должен иметь возможность иметь любой целевой ЦП на моей платформе С#. Здесь снова вместо ссылки на мой проект оболочки С++/CLI, я бы ссылался на требуемую dll на основе целевой платформы.
Мои вопросы:
- Как сообщить проекту С++/CLI, который .lib для ссылки на целевую платформу?
- Как я могу сказать, что проект С#, с которым dll С++/CLI ссылается на целевую платформу?
Добавлю, что С# проект CLIB LIBRARY, который будет использоваться клиентом x86 или x64.
Надеюсь, мой вопрос достаточно ясен. Любая помощь будет оценена!
UPDATE на основе: Условные ссылки в .NET-проекте, можно избавиться от предупреждения?...
Итак, теперь я отредактировал файл .csproj, используя условие для ссылки на dll следующим образом:
<ItemGroup>
<Reference Include="AlibCppWrapper, Version=1.0.4303.21410, Culture=neutral, PublicKeyToken=c0c17a53adc44091, processorArchitecture=AMD64"
Condition="$(Platform) == 'x64'">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\x64\Debug\AlibCppWrapper.dll</HintPath>
</Reference>
<Reference Include="AlibCppWrapper, Version=1.0.4303.21410, Culture=neutral, PublicKeyToken=c0c17a53adc44091, processorArchitecture=x86"
Condition="$(Platform) == 'x86'">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Debug\AlibCppWrapper.dll</HintPath>
</Reference>
</ItemGroup>
К сожалению, это не работает, поскольку для $(Platform) установлено значение AnyCPU...