none
c# call vfp dll run time error:嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。 RRS feed

  • 問題

  • DEAR 大大

    用 VFP 寫了一個 Dll

    Define Class VFPClass as Custom olepublic
    	Function Hello as String
    		Return "Hello"
    	EndFunc
    
    	Function Hello2(UserName as String) as String
    		Return "Hello " + UserName
    	EndFunc
    EndDefine

    有在 C# 專案內加入 COM 的參考

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using testvfpdll; //dll file name
    
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                VFPClassClass VFPDll = new VFPClassClass();
                String strHello;
                strHello = VFPDll.Hello();
                MessageBox.Show(strHello);
    
                MessageBox.Show(VFPDll.Hello2("Lin"));
            }
        }
    }

    執行到 strHello = VFPDll.Hello(); 會出現"嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。"的訊息。

    請大大們指導一二!謝謝!

    2014年1月2日 上午 07:45

解答

  • 把 DEP 關閉。

    XP年代設計的編譯器並沒打算繞過 Vista 以後的 DEP / UAC ,所以把 DEP 關掉再試。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 沒人性 2014年1月3日 上午 02:45
    2014年1月2日 下午 02:28

所有回覆

  • 你的編譯目標平台請先調整為 X86 試試看

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年1月2日 上午 08:58
    版主
  • 謝謝版主回覆.

    有改過X86平台,但是問題仍在。

    2014年1月2日 上午 09:12
  • 看看這篇文章有沒有幫助:COM Interop: Making .NET and VFP Talk to Each Other

    2014年1月2日 下午 01:21
  • 把 DEP 關閉。

    XP年代設計的編譯器並沒打算繞過 Vista 以後的 DEP / UAC ,所以把 DEP 關掉再試。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 沒人性 2014年1月3日 上午 02:45
    2014年1月2日 下午 02:28
  • this,謝謝您的回覆,嘗試文章中的方法,問題還在。

    心冷熱情熄,關閉DEP是放大絶招,影響重大,but, it works. Thank you!!

    bcdedit /set nx AlwaysOff
    http://social.technet.microsoft.com/Forums/zh-TW/a8855261-df59-4a92-b76f-c523b8708457/-dep?forum=windowsserver2008zhcht

    • 已編輯 沒人性 2014年1月3日 上午 05:32
    2014年1月3日 上午 02:47
  • COM DLL 被 DEP 干擾的案例很多,這邊也有一個: http://tlcheng.wordpress.com/2009/10/02/owc-%e9%97%9c%e6%96%bc-8-%e6%9c%88%e4%bb%bd%e5%ae%89%e5%85%a8%e6%9b%b4%e6%96%b0%e4%b8%ad%e7%9a%84-11-0-8304-0/

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年1月3日 下午 12:59