как Вы называете управляемое (c#) функция от C++?

buffer-substring вместе с region-beginning и region-end может сделать это.

5
задан Joe Doyle 18 January 2010 в 17:12
поделиться

1 ответ

Похоже, ваша сборка C # не разрешается во время выполнения. Находится ли ваша библиотека C # в том же каталоге, что и исполняемый файл (или его подкаталог)? Прошло некоторое время с тех пор, как я сделал это, но я припоминаю, что если ваша сборка не установлена ​​в GAC, она должна находиться в каталоге (или подкаталоге), где находится ваш исполняемый файл, а не в местоположении библиотеки DLL, которая использует Это. Это связано с функциями безопасности .NET.

Если у вас все еще есть проблемы, вы можете попробовать разрешить сборку самостоятельно. В свой проект C ++ с поддержкой clr попробуйте добавить следующее:

using namespace System;
using namespace System.Reflection;
void Resolve()
{
    AppDomain::CurrentDomain->AssemblyResolve +=
        gcnew ResolveEventHandler(OnAssemblyResolve);
}
Assembly ^OnAssemblyResolve(Object ^obj, ResolveEventArgs ^args)
{
#ifdef _DEBUG
    String ^path = gcnew String(_T("<path to your debug directory>"));
#else
    String ^path = gcnew String(_T("<path to your release directory>"));
#endif
    array<String^>^ assemblies =
        System::IO::Directory::GetFiles(path, _T("*.dll"));
    for (long ii = 0; ii < assemblies->Length; ii++) {
        AssemblyName ^name = AssemblyName::GetAssemblyName(assemblies[ii]);
        if (AssemblyName::ReferenceMatchesDefinition(gcnew AssemblyName(args->Name), name)) {
            return Assembly::Load(name);
        }
    }
    return nullptr;
}

Возможно, вам придется немного подправить код, чтобы он скомпилировался в вашем проекте. В моем случае я сделал две функции статическими методами класса в моем проекте с поддержкой clr. Просто убедитесь, что вы вызываете функцию Resolve () на ранней стадии вашего кода, то есть до того, как вы попытаетесь вызвать get_number_from_cs () .

Хотя использование COM - это вариант, он не обязательно. Вы на правильном пути со своим нынешним подходом. Если вы хотите, чтобы вас держали за руку, взгляните на этот пример CodeProject . Это тот, который я следую, чтобы мое неуправляемое приложение могло использовать мои управляемые сборки.

4
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: