Вот моя проблема.
Я оборачиваю C dll в C #. Для этого я сначала пишу оболочку C ++ / CLI. Собственная библиотека C связана с оболочкой C ++ / CLI. (Свойства компоновщика в проекте C ++ / cli).
Вот как все теперь организовано:
- Родной C .lib: как x86, так и 64bit.
- 1 решение, содержащее 2 проекта:
- Проект оболочки C ++ / CLI, с которым связан нативный C .lib
- C # проект, ссылающийся на проект C ++ / CLI
Моя проблема связана с тем, что мне нужен C # для цели "Любой процессор". Но эта опция недоступна в C ++ / CLI, поскольку она компилируется непосредственно в собственный код.
Моя идея решить эту проблему:
- Скомпилируйте оболочку C ++ / CLI в x86, а затем измените конфигурацию и скомпилируйте 64-битную версию. Когда он скомпилируется, я хотел бы сказать ему, какую DLL взять на основе платформы. то есть: если компилируется в 64-битной версии, ссылка 64-битная собственная C dll, в противном случае, если x86, ссылка x86-собственная версия C.
- После этого я смогу использовать любой процессор на моей платформе C #. Здесь, опять же, вместо того, чтобы ссылаться на мой проект оболочки C ++ / CLI, я бы ссылался на требуемый dll на основе целевой платформы.
Мои вопросы:
- Как мне сказать проекту C ++ / CLI, на какую .lib ссылаться в зависимости от целевой платформы?
- Как мне сказать C # проекту, на какой C ++ / CLI ссылаться на DLL на основе целевой платформы?
Позвольте мне добавить, что C # проект CLIB LIBRARY для использования клиентом x86 или x64.
Надеюсь, мой вопрос достаточно ясен. Любая помощь будет оценена!
ОБНОВЛЕНИЕ на основе: Условные ссылки в .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>
К сожалению, это не работает, поскольку $ (платформа) установлена на AnyCPU ...