我有一个C#WinForms .NET 3.5应用程序,我需要调用在Visual FoxPro 7中编写的COM DLL。我已将COM对象添加到C#项目中,并且可以
在对象浏览器中查看对象及其成员。
但是,当我尝试从COM对象调用任何方法或访问任何属性时,我会抛出以下异常:
System.AccessViolationException未处理 Message =尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 来源= Interop.emscosting 堆栈跟踪: 在emscosting.ComBaseClass.ShellExecute(String tcItem,String tcAction) ...
以下是我正在使用的一些示例C#代码:
emscosting.ComBaseClass com = new emscosting.ComBaseClass(); com.ShellExecute(file,“TRUE”); < ---此处抛出异常
当我尝试在调试器监视窗口中访问COM对象的任何公共属性时,我会在“值”列中显示以下内容: 'com.DatabaseUserName'引发了'System.AccessViolationException'类型的异常
我已经在使用这个COM对象而没有来自其他VFP应用程序,Office应用程序和Javascript / Classic ASP的任何问题。
有人可以帮我解决这个问题吗?
我确实有COM的原始VFP源代码,下面是我宣布公共属性的代码片段,但我正在尝试
尽可能避免重写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 :(得分:0)
如果您有x64系统,则必须编译.Net Application for x86。 当您使用“任何CPU”或“x64”编译它时,您无法访问x32 FoxPro-DLL。