Я создал DLL с одной экспортированной функции в C++, таким образом:AccessViolationException при вызове функции C++ из VB.NET
extern "C" __declspec(dllexport) int __stdcall AlmacenarPedido(DWORD dwTelefono, LPCTSTR lpszFechaPedido, LPCTSTR lpszHoraPedido, LPCTSTR lpszCodigoInterno, LPCTSTR lpszDescripcionProducto,
int iCantidadProducto, int iValorUnitario, LPCTSTR lpszFechaEntrega, LPCTSTR lpszHoraEntrega, int iKilosProducto,
LPCTSTR lpszFechaDespacho, LPCTSTR lpszHoraDespacho)
Я пытаюсь вызвать эту функцию из VB.NET.
Это DllImport:
<DllImport("ComTesting.dll", CharSet:=CharSet.Unicode, CallingConvention:=CallingConvention.StdCall)>
Function AlmacenarPedido(ByVal dwTelefono As Long, ByVal lpszFechaPedido As String, ByVal lpszHoraPedido As String,
ByVal lpszCodigoInterno As String, ByVal lpszDescripcionProducto As String,
ByVal iCantidadProducto As Integer, ByVal iValorUnitario As Integer, ByVal lpszFechaEntrega As String, ByVal lpszHoraEntrega As String,
ByVal iKilosProducto As Integer, ByVal lpszFechaDespacho As String, ByVal lpszHoraDespacho As String) As Integer
End Function
И это реальный вызов:
Sub Main()
Dim lTelefono As Long = 229188562
Dim sFechaPedido As String = "16/12/2016"
Dim sHoraPedido As String = "20:30"
Dim sCodigoInterno As String = "123456"
Dim sDescripcionProducto As String = "CARGA CODIGAS CATALITICO 15 KILOS"
Dim iCantidadProducto As Integer = 2
Dim iValorUnitario As Integer = 14000
Dim sFechaEntrega As String = "19/12/2016"
Dim sHoraEntrega As String = "15:14"
Dim iKilosProducto As Integer = 15
Dim sFechaDespacho As String = "19/12/2016"
Dim sHoraDespacho As String = "10:00"
Dim iPedido As Integer = AlmacenarPedido(lTelefono, sFechaPedido, sHoraPedido, sCodigoInterno, sDescripcionProducto, iCantidadProducto, iValorUnitario, sFechaEntrega, sHoraEntrega, iKilosProducto, sFechaDespacho, sHoraDespacho)
Console.WriteLine(iPedido)
End Sub
Когда вызывающий сделан, AccessExceptionException выбрасывается.
Любая помощь, пожалуйста?
EDIT:
StackTrace:
en Testing.MainModule.AlmacenarPedido(Int64 dwTelefono, String& lpszFechaPedido, String& lpszHoraPedido, String& lpszCodigoInterno, String& lpszDescripcionProducto, Int32 iCantidadProducto, Int32 iValorUnitario, String& lpszFechaEntrega, String& lpszHoraEntrega, Int32 iKilosProducto, String& lpszFechaDespacho, String& lpszHoraDespacho)
en Testing.MainModule.Main() en C:\WorkingFolder\Proyectos\Lipigas\GasProvidencia\Testing\MainModule.vb:línea 37
en System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
en System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
en System.Threading.ThreadHelper.ThreadStart()
Показать полный трассировки стека , – OldProgrammer
Добавлена трассировка стека – jstuardo
Показать код функции, экспортируемой вашей DLL. Кроме того, ваша библиотека DLL составлена как UNICODE? (Подсказка: LPC ** T ** STR неоднозначно и вызывает путаницу в отношении объявления charset в .net. Используйте LPCSTR или LPCWSTR явно). – selbie