Создано .Dll из и .ocx с использованием C ++ / CLI, но взаимодействие не загружается в C # - PullRequest
0 голосов
/ 02 июля 2019

Создано .Dll в C ++ / CLI с использованием стороннего ocx.but при загрузке .DLL с зависимостью, которую я получаю ниже Ошибки:

System.Windows.Markup.XamlParseException: '' Вызов конструкторадля типа 'CommonXFS.Interface.Utility.MainWindow', который соответствует указанным ограничениям связывания, возникла исключительная ситуация. 'Номер строки «5» и позиция «9».InnerException: скрыть код копирования FileNotFoundException: не удалось загрузить файл или сборку 'Interop.NXCameraXLib.1.0, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей.Система не может найти указанный файл.

Я пробовал оба (x86) и (x64)

My Dll не может загрузить как "Interop.NXCameraXLib.1.0" (файл из OCXдобавлено в качестве ссылки)

Я даже удалил все функции из моего заголовка c ++ и попытался загрузить их в консоль C ++ / CLI, но все еще сталкиваюсь с той же проблемой.

#pragma once

using namespace System;
using namespace NXCameraXLib;

namespace Camera {
    public ref class CameraWrapper:public NXCameraXClass
    {
    public:
        CameraWrapper^ m_pCameraWrapper;
    public:

        //Constructor
        CameraWrapper()
        {
            m_pCameraWrapper = gcnew CameraWrapper();
        }
        //Destructor
        ~CameraWrapper()
        {
            this->!CameraWrapper();
            GC::SuppressFinalize(this);
        }
        //
        !CameraWrapper()
        {
            if (m_pCameraWrapper)
            {
                delete m_pCameraWrapper;
                m_pCameraWrapper = nullptr;
            }
        }

        long Open(long timeout)  // Helper function
        {
            System::Console::WriteLine("OpenSessionSync is called");
            return this->OpenSessionSync(timeout);

            //instance to be created
        }
        long close()  // Helper function
        {
            System::Console::WriteLine("CloseSessionSync is called");
            return this->CloseSessionSync();
        }
        long RequestLock(long timeout)
        {
            System::Console::WriteLine("RequestLock is called");
            //this->LockGranted;
            long Result;
            //EventCardReader^ pE = gcnew EventCardReader;
            Result = this->RequestLock(timeout);
            //return this->RequestLock(timeout);
            if (Result == 0) {
                //pE->E();
                return Result;
            }
            else if (Result == -15) {
                //pE->pFatalErrorE("FatalError", Result);
                return Result;
            }
            else if (Result == -39 || -54) {
                //pE->pLockTimeoutE();
                return Result;
            }
        }
        void ReleasingLock()
        {
            System::Console::WriteLine("ReleaseLock is called");
            this->ReleaseLock();
        }
        // TODO: Add your methods for this class here.

        System::String^ CardGetExtraStatus(System::String ^ KeyName)
        {
            return this->GetExtraStatus(KeyName);
        }
    };
}

Я исключаюзагрузка dll и Interop, и я должен быть в состоянии вызвать функции OCX / Interop, используя мою DLL.

...