-1

Я сталкиваюсь с проблемой вызова методов из VB.NET (VS2010) в DLL. Ошибка заключается в следующем:

Это может быть связано с повреждением кучи, что указывает на ошибку в myProject.exe или любой из загруженных им библиотек DLL. Это также может быть связано с тем, что пользователь нажимает клавишу F12, пока фокус находится на myProject.exe. Окно вывода может иметь больше диагностической информации.

На стороне VB.NET это было объявлено следующим образом:

 Private Declare Function myFunc Lib "myDLL.dll" (ByVal a As String, ByVal b As String, ByVal c As String, ByVal d As String, ByVal e As String) As Byte

На неуправляемой стороне объявление функции выглядит следующим образом:

unsigned char __declspec(dllexport) __stdcall  myFunc (char *a, char* b, char* c, char *d, char *e);

и вызов из VB.NET производится следующим образом:

            b = Space(128)
            c = Space(40)
            d = Space(128)

            ret_val = myFunc ("123", b, c, d, "e") // error thrown when executing this line

Я перекомпилировал myDLL.dll с фреймворком 4.0, но не повезло. Я также проверил маршалинг по умолчанию для веб-сайта Microsoft для строк, где упоминается использование типа ByVal для передачи строк из управляемого в неуправляемый код, что и делается здесь. Также я передаю строковую переменную, используя Space(), чтобы на неуправляемой стороне код мог узнать размер строки, выполнив strlen(), и не перезаписывал память.

Странно, у меня не было проблем с вызовом этого метода из проекта VS2005. Это случилось только когда я переключаюсь на VS2010.

Любая помощь будет принята с благодарностью.

Ура, джайн

0