У меня есть приложение C# WinForms .NET 3.5, которое мне нужно вызвать COM-библиотеку, написанную на Visual FoxPro 7. Я добавил объект COM в проект C# и можетОшибка System.AccessViolationException при доступе к COM-библиотеке, написанной на Visual FoxPro
Просмотр объектов и их элементов в браузере объектов в порядке.
Однако при попытке вызвать любые методы или получить доступ к любым свойства из COM-объекта я получаю следующее исключение: брошенную
System.AccessViolationException было необработанное сообщение = Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. Источник = Interop.emscosting StackTrace: в emscosting.ComBaseClass.ShellExecute (String, String tcItem tcAction) ...
Ниже приведены примеры, C# код, я использую:
emscosting.ComBaseClass ком = новый emscosting.ComBaseClass(); com.ShellExecute (файл, "TRUE"); < --- Исключение брошено здесь
Кроме того, когда я пытаюсь получить доступ к любому из открытых свойств объекта COM в окне отладчика часов я получаю следующее появится в столбце Значения: «com.DatabaseUserName» бросил исключение типа «System.AccessViolationException»
Я уже использую этот объект COM без каких-либо проблем с другими приложениями VFP, приложениями Office и в Javascript/Classic ASP.
Может кто-нибудь помочь мне решить эту проблему, пожалуйста?
У меня есть оригинальный VFP исходный код для COM еще и ниже приведен фрагмент кода, где я декларирующую общие свойства, однако я пытаюсь
избегать переписывания COM DLL, если это возможно!
#If BUILD_AS_COM_OBJECT
Define Class emsCosting As Combase OlePublic
#Else
Define Class emsCosting As Combase
#Endif
CostingsPath = COSTINGS_PATH
Dimension CostingsPath_COMATTRIB[5]
CostingsPath_COMATTRIB[1] = COMATTRIB_NONE
CostingsPath_COMATTRIB[2] = "Contains the path of where the costings get saved" && HelpString
CostingsPath_COMATTRIB[3] = "CostingsPath" && Capitalisation
CostingsPath_COMATTRIB[4] = "String" && Property Type
CostingsPath_COMATTRIB[5] = 0 && Number of parameters
CostingsMaster = COSTINGS_MASTER
Dimension CostingsMaster_COMATTRIB[5]
CostingsMaster_COMATTRIB[1] = COMATTRIB_NONE
CostingsMaster_COMATTRIB[2] = "Contains the filename of the costings master (usually costings.xls)" && HelpString
CostingsMaster_COMATTRIB[3] = "CostingsMaster" && Capitalisation
CostingsMaster_COMATTRIB[4] = "String" && Property Type
CostingsMaster_COMATTRIB[5] = 0 && Number of parameters
Function SetCostingsPath(tcPath As String) As VOID HelpString "This is a test function"
CostingsPath = tcPath
EndFunc
Function TestFunctionNoParam() AS String HelpString "This is a helpstring"
Return "\\TEST\ContractReviewCostings\"
EndFunc
......
Примечание: Обе эти две тестовые функции, определенные выше, не с System.AccessViolationException исключения