dllimport C ++ DLL в VB.net - PullRequest
       4

dllimport C ++ DLL в VB.net

1 голос
/ 29 декабря 2010

Я застрял в импорте DLL с DLL C ++, и мне действительно нужна помощь, чтобы преодолеть это.

Вот функция в dll c ++, которую я хочу вызвать из моего кода VB.net.

bool LoadNewTestPlan (const char * szPlanFileName = "");

Я пробовал много способов на своем VB.net, но всегда получал сообщение об ошибке: «Попытка чтения или записи защищенной памяти. Это часто свидетельствует о повреждении другой памяти».

Я попытался передать в byte (), Marshalling с LPStr, SafeArray, и ничего не работает.

Вот пример кода моего кода в модуле

<DllImport("HPVKIfc.dll", EntryPoint:="?LoadNewTestPlan@HPVKIfc@@QAE_NPBD@Z", CharSet:=CharSet.Ansi)> _
Public Function LoadNewTestPlan(<MarshalAs(UnmanagedType.LPStr)> ByVal pln As String) As Boolean

End Function

Вы видите что-то не так?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Если не указано иное, свободная функция (не член класса), вероятно, будет использовать соглашение о вызовах Си.Попробуйте это из Module (не класса):

<DllImport("MyLib.dll", CallingConvention := CallingConvention.Cdecl, CharSet := CharSet.Ansi)> _
Private Function LoadNewTestPlan(PlanFilename As String) As Boolean
End Function
1 голос
/ 29 декабря 2010

Я никогда не использую VB.net, но достигаю той же функциональности в C #. Поэтому я пишу на C #: это может помочь вам:

Конец C #:

// Включить заголовочный файл с помощью System.Runtime.InteropServices; // Затем пишем следующие две строки в любой области видимости [DllImport ( "NameOfYourDLL.dll")] private static extern void NameOfYourFunction (// Параметры функции, если есть); // В основном это объявление функции

// Теперь, наконец, вызовите эту функцию обычным способом

Конец C ++:

Не забудьте выставить свою функцию dll, написав что-то вроде "__declspec (dllimport)" перед вашей функцией __declspec (dllimport) bool LoadNewTestPlan (const char * szPlanFileName = "");

Если вам это кажется полезным, не стесняйтесь спрашивать более подробную информацию.

...