Я сталкиваюсь с проблемой вызова методов из 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.
Любая помощь будет принята с благодарностью.
Ура, джайн