C # Dllimport проблемы в Visual Studio 2010 .NET Framework 4 - PullRequest
1 голос
/ 30 марта 2011

Я пытаюсь импортировать DLL, написанную на C ++, в моем приложении C #. Приложение должно получать имена несоответствующих веб-камер. Он хорошо работает в .NET Framework 3.5 (правильно получает все имена), но у меня возникают проблемы с получением имен в Framework 4. Вместо этого я получаю что-то вроде «îş».

Вот фрагменты моего кода:

  • c ++ dll:

    TCHAR GetDeviceName(int index)
    {
        char name[255];
        GetDeviceNameAux(index, name);
        TCHAR retVal = (TCHAR)name;
        return retVal;
    }
    
  • c # приложение (работает для framework 3.5)

    [DllImport("FindCaptureDevice.dll")]
    public static extern string GetDeviceName(int index);
    

Я пробовал также:

[DllImport("FindCaptureDevice.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern string GetDeviceName(int index);

с различными параметрами для CallingConvention и CharSet.

Заранее спасибо за любую помощь.

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Хорошо.Благодаря вашим комментариям мне удалось решить мою проблему.Я использовал веб-сайт

, и я изменил в коде c #

[DllImport("FindCaptureDevice.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    public static extern void GetDeviceName(StringBuilder response, int index);

, и я называю это с

StringBuilder tempDevice = new StringBuilder(255);
                GetDeviceName(tempDevice, DevCount);

и в коде c ++, который я написал

void GetDeviceName(char * outChr, int index)
{
    GetDeviceNameAux(index, outChr);
}

и я копирую данные в outChr с помощью метода strcpy_s.

1 голос
/ 30 марта 2011

Измените тип возврата на StringBuilder:

[DllImport("FindCaptureDevice.dll")]
public static extern StringBuilder GetDeviceName(int index);
0 голосов
/ 11 апреля 2011

вы можете использовать WIA для захвата или сканирования изображения

...