2013-06-13 2 views
0

У меня есть приложение 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 исключения

ответ

0

Вы должны компилировать приложения .NET для x86, если вы имеют систему x64. Когда вы компилируете его с помощью «Любой процессор» или «x64», вы не можете получить доступ к x32 FoxPro-DLL.