У меня есть решение Visual Studio 2017 со следующими проектами:
CppClrQuestion -- Solution
CUnamagedLib -- C++ Unmanaged Windows DLL
CUnmanagedLib.cpp
CUnmanagedLib.h
ClrManagedLib -- C++/CLR DLL Project
ClrManagedLib.cpp
ClrManagedLib.h
CSharpDotNetConsoleApp -- C#/.NET
Program.cs
CSharpDotNetConsoleApp
имеет ссылку на проект ClrManagedLib
, а ClrManagedLib
имеет ссылку на проект CUnamagedLib
.
Все компилируется нормально.Однако, когда я запускаю приложение C #, я получаю следующее исключение:
System.IO.FileNotFoundException: 'Could not load file or assembly 'CppClrLib2.dll' or one of its dependencies. The specified module could not be found.'
Если я изменяю ClrManagedLib
, чтобы он ничего не вызывал в CUnamagedLib
, он работает нормально.
Как настроить решение, в котором у меня есть приложение C #, которое ссылается на управляемую библиотеку C ++ / CLR, которая затем ссылается на неуправляемую библиотеку C ++?
Для справки приведено содержимое исходного файла:
CUnmanagedLib.cpp
#include "stdafx.h"
__declspec(dllexport) int GetNumUnmanaged(void) {
return 5;
}
CUnmanagedLib.h
#pragma once
__declspec(dllimport) int GetNumUnmanaged(void);
ClrManagedLib.cpp
#include "stdafx.h"
#include "..\CUnamangedLib\CUnmanagedLib.h"
#include "ClrManagedLib.h"
int ClrManagedLib::Class1::GetNum() {
return GetNumUnmanaged();
}
ClrManagedLib.h
#pragma once
using namespace System;
namespace ClrManagedLib {
public ref class Class1
{
public:
int GetNum();
};
}
Program.cs
namespace CSharpDotNetConsoleApp {
class Program {
static void Main(string[] args) {
var managedObj = new ClrManagedLib.Class1();
}
}
}