Ошибка при загрузке c ++ dll в проекте c # в visual studio 2013 - PullRequest
1 голос
/ 11 марта 2019

Я столкнулся с очень странной ситуацией, связанной с загрузкой моего неуправляемого dll c ++ третьей стороны в мой проект на c #.Я добавил неуправляемую DLL в папку моего бина, и в моем файле кода C # я импортировал DLL, используя атрибут импорта Dll.Проблема возникает, когда я просто использую имя dll в атрибуте импорта Dll, когда я указываю полный путь с именем dll в атрибуте импорта dll, я могу загружать и вызывать методы c ++ dll.

Проблема в том, когда я использую dllимя только в атрибуте импорта Dll показывает следующее сообщение об ошибке "Невозможно загрузить DLL 'C: \ Users \ i2v \ Desktop \ NetDEVSDK.dll': указанный модуль не найден. (Исключение из HRESULT: 0x8007007E). "

У меня есть библиотека c ++ в моей папке bin, и мой проект установлен в режиме сборки x86 (потому что c ++ dll - это сборка для x86). Также на моем компьютере установлены все распространяемые файлы времени выполнения c ++.Пожалуйста, помогите мне решить эту проблему.

Мой код -

public class MakeConnection
{
    private bool ConnectDevice()
    {
        bool IsConnected = false;
        try
        {
            Client.CLIENT_OpenSound(10);
            ImporRequiredDLL.NETDEV_Init();
            NETDEV_DEVICE_INFO_S pstDevInfo = new NETDEV_DEVICE_INFO_S();
            IntPtr lpDevHandle = ImporRequiredDLL.NETDEV_Login(this.Camera.Get_Default_IP(), 80, this.Camera.Camera_UserName, this.Camera.Camera_Password, ref pstDevInfo);
            if (lpDevHandle == IntPtr.Zero)
            {
                return IsConnected;
            }
            DevHandle = lpDevHandle;
            IsConnected = true;
        }  
        catch(Exception ex)
        {
            IsConnected = false;
            ExceptionHandler.handleException(ex);
        }
        return IsConnected;
    }
}

public class ImporRequiredDLL
{
    [DllImport(@"NetDEVSDK.dll")]
    public static extern Int32 NETDEV_StopVoiceCom(IntPtr lpVoiceComHandle);

    [DllImport(@"NetDEVSDK.dll")]
    public static extern IntPtr NETDEV_StartVoiceCom(IntPtr lpUserID, Int32 dwChannelID, IntPtr cbPlayDataCallBack, IntPtr lpUserData);

    [DllImport(@"NetDEVSDK.dll")]
    public static extern IntPtr NETDEV_Login(String szDevIP, Int16 wDevPort, String szUserName, String szPassword, ref NETDEV_DEVICE_INFO_S pstDevInfo);

    [DllImport(@"NetDEVSDK.dll")]
    public static extern Int32 NETDEV_Init();
}

public struct NETDEV_DEVICE_INFO_S
{        
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)]
    public byte[] szReserve;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...