Как вызвать эту функцию DLL из C ++ / C # - PullRequest
1 голос
/ 20 декабря 2011

Я потратил много времени, пытаясь выяснить это, поэтому я подумал, что могу получить некоторую помощь здесь.В основном у меня есть функция DLL, объявленная следующим образом в IDL:

[id(1), helpstring("method findFile")] HRESULT findFile(
    [in] BSTR fileName,
    [out] LONG* someValue
    );

Как именно я могу объявить и вызвать из C ++ / C #?

Примечание: есть приложение VB6, которое успешно вызываетфункция.Объявление:

 Private Declare Function findFile Lib "thedll.dll" ( _
    ByVal fileName As String, _
    ByRef someValueAs Long _
  )

Вызов:

Dim a As String
Dim b As Long
Dim r As long

a = "image.jpg"
b = -1
r = findFile(a, b)

Приложение :

Я не могу гарантировать, что код VB6 выглядит так, потому что яУ меня есть исполняемый файл, мне только сказали, как выглядит эта часть, так что, возможно, вы, ребята, правы, и она не соответствует.Я написал C ++ DLL, и теперь мне нужно собрать некоторый код, который успешно вызывает DLL, чтобы попробовать что-то и не зависеть от этого exe-файла.

Реализация функции DLL на C ++ выглядит следующим образом:

STDMETHODIMP CFinder::findFile(BSTR fileName, LONG* someValue)
{
    *someValue = 8;

    return S_OK;
}

1 Ответ

1 голос
/ 20 декабря 2011

непроверенное объявление C #:

[DllImport("thedll.dll", SetLastError=true)]
static extern int findFile([MarshalAs(UnmanagedType.BStr)]string fileName, out int someValue);
...