none
關於使用 OCX 的問題 RRS feed

  • 問題

  • 大家好:

    我是使用OCX的新手
    我想使用IFC Engine OCX (http://www.ifcbrowser.com/ifcengineocx.html)
    於是我下載了關於C#的範例檔
    經過了一翻努力 終於可以執行
    但是在讀檔案近來時卻出現了錯誤"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
    以下是詳細錯誤訊息
    System.AccessViolationException 未處理
      Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
      Source="mscorlib"
      StackTrace:
           at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
           at IFCENGINEOCXLib._DIFCEngineOCX.sdaiGetEntityExtentBN(Int32 model, String entityName)
           at AxIFCENGINEOCXLib.AxIFCEngineOCX.sdaiGetEntityExtentBN(Int32 model, String entityName)
           at WindowsApplication2.Form1.addObjectType(String objectTypeName) in E:\IFCEngineOCX\OCX_Example_Csharp\WindowsApplication2\Form1.cs:line 210
           at WindowsApplication2.Form1.button1_Click(Object sender, EventArgs e) in E:\IFCEngineOCX\OCX_Example_Csharp\WindowsApplication2\Form1.cs:line 228
           at System.Windows.Forms.Control.OnClick(EventArgs e)
           at System.Windows.Forms.Button.OnClick(EventArgs e)
           at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           at System.Windows.Forms.Control.WndProc(Message& m)
           at System.Windows.Forms.ButtonBase.WndProc(Message& m)
           at System.Windows.Forms.Button.WndProc(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.Run(Form mainForm)
           at WindowsApplication2.Form1.Main() in E:\IFCEngineOCX\OCX_Example_Csharp\WindowsApplication2\Form1.cs:line 203
           at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    請問大家  這問題我該怎麼去解決   是環境的問題還是程式的問題???


    謝謝大家   

    PS:
    我電腦環境 Windows 7+Visual studio2008 C#
    我在XP使用一樣有此問題







    2009年11月14日 下午 01:17

所有回覆

  • "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."

    把 UAC 、BIOS內 DEP 關掉,再跑跑看,如果可以跑,再單獨恢復其中一個,看看是哪邊擋掉了。

    Windows Vista 以後加強安全性保護後,很多舊的東西可能不能順利執行。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月14日 下午 01:30

  • 您好  謝謝您的回覆我嘗試了去關閉 XP DEP 但是卻還是不能執行
    有一樣的問題  還有可能是其他問題嗎?
    PS:我用OCX 去呼叫一個.dll的含式 就出現問題了

    謝謝大家 
    2009年11月15日 上午 04:57
  • 大家好

    編譯器或直譯器:Visual studio 2008
    編譯器語系: 中文
    作業系統:XP
    作業系統語系:中文



    我是使用OCX的新手
    我想使用IFC Engine OCX (http://www.ifcbrowser.com/ifcengineocx.html)
    於是我下載了關於VB的範例檔
    經過了一翻努力 終於可以執行
    但是卻出現了我沒法解決的問題:

    內容如下:

    類型 'System.AccessViolationException' 的未處理例外狀況發生於 mscorlib.dll

    其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。

    錯誤的程式碼為粗體:
    "
    Option Strict Off
    Option Explicit On
    Friend Class Form1
        Inherits System.Windows.Forms.Form
        Private Sub cmdLoad_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdLoad.Click
            IFCEngineOCX1.schemaName = txtSchemaName.Text
            IFCEngineOCX1.FileName = txtFileName.Text


            Call IFCEngineOCX1.reloadFile()


        End Sub
       
        Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
            txtFileName.Text = My.Application.Info.DirectoryPath & "\files\house.ifc"
            txtSchemaName.Text = My.Application.Info.DirectoryPath & "\files\IFC2X2_ADD1.exp"
        End Sub
       
        Private Sub IFCEngineOCX1_DblClick()
            Dim id As Integer
           
            If IFCEngineOCX1.setSelectedObject() Then
                id = IFCEngineOCX1.getSelectedObject()
                txtGlobalID.Text = IFCEngineOCX1.sdaiGetStringAttrBN(id, "GlobalId")
                txtName.Text = IFCEngineOCX1.sdaiGetStringAttrBN(id, "Name")
                txtDescription.Text = IFCEngineOCX1.sdaiGetStringAttrBN(id, "Description")
                txtObjectType.Text = IFCEngineOCX1.sdaiGetStringAttrBN(id, "ObjectType")
            Else
                txtGlobalID.Text = "<none>"
                txtName.Text = "<none>"
                txtDescription.Text = "<none>"
                txtObjectType.Text = "<none>"
            End If
        End Sub
    End Class
    "

    請描述預期成果:
    會把模型檔讀入圖台並展示

    錯誤的呼叫堆疊那行:
         mscorlib.dll!System.RuntimeType.ForwardCallToInvokeMember(string memberName, System.Reflection.BindingFlags flags, object target, int[] aWrapperTypes, ref System.Runtime.Remoting.Proxies.MessageData msgData) + 0x184 位元組   




    • 已合併 璉璉 2009年11月15日 上午 11:19
    2009年11月15日 上午 05:23
  • 請勿重複發文

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月15日 上午 06:12
    版主
  • 謝謝您的 指教
    我會認真的反省
    我只是找不到錯誤的點去找線索 

    那我將會 仔細找尋 去學 
    希望能給我在這有發問的機會

    謝謝 大家
    2009年11月15日 上午 07:03
  • 你可以在原有討論串使用 "回覆"功能繼續發問.

    張貼文章應注意事項及應提供資訊


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年11月15日 上午 07:22
    版主
  • 有原廠的,可以直接問原廠。

    若是你的意思是你改 ocx 呼叫某個 dll 掛,那跟 c# 沒啥關係,因為 ocx 不可能是 c# 寫的,請先確認在原編輯器執行的正確性。

    另外前面說了,DEP 請從 BIOS 關,而不是從 OS 關,你要測 OS 關,請在 BIOS 那邊關了有效,再測 OS 。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月15日 上午 11:16
  • 移動文章並合併討論緒。

    認真反省就不要加後面那堆話,這樣只會惹的人家不想理你。

    如果吳育昇跟成龍一樣牽拖別人,道歉時補上一句:「我只是犯了天下男人都會犯的錯」,就會讓人更賭爛,不會像現在這樣,大家只是看戲。不該加的話就不要說,說了只會讓人賭爛。

    發生記憶體存取錯誤,並不是簡單的問題,這些資訊不足以解決問題,有可能原廠寫的就有問題,例如這篇是請求 CSS 協助解決的問題,最後發現問題在原廠,原廠又擺爛:
    http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!2324.entry

    請先確認原廠的 sample 可以正常執行。


    T.L. Cheng
    2009年11月15日 上午 11:29