DLL是另一家公司的 用什么開發的不清楚
第1個問題:嘗試讀取或寫入受保護的記憶體

代碼如下:
private void button1_Click(object sender, EventArgs e)
{
txtResult.Text = "";
txtOut.Text = "";
string strIn = txtIn.Text;
StringBuilder strOut = new StringBuilder(1024);
int result = Test1.YbjkInterface(strIn,ref strOut);
txtResult.Text = result.ToString();
txtOut.Text = strOut.ToString();
MessageBox.Show("執行完畢");
}
class Test1
{
[DllImport("hisYbjkInterface.dll")]
public static extern int YbjkInterface(string strIn, ref StringBuilder strOut);
}
搜了一下 改成這樣 不再報記憶體錯誤
private void button1_Click(object sender, EventArgs e)
{
txtResult.Text = "";
txtOut.Text = "";
string strIn = txtIn.Text;
StringBuilder strOut = new StringBuilder(1024);
int result = Test1.YbjkInterface(strIn, strOut);
txtResult.Text = result.ToString();
txtOut.Text = strOut.ToString();
MessageBox.Show("執行完畢");
}
class Test1
{
[DllImport("hisYbjkInterface.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern int YbjkInterface(string strIn, [MarshalAs(UnmanagedType.LPStr)]StringBuilder strOut);
}
但又有另一個問題 如果傳入錯誤的引數 DLL會有出參提示 格式不對 但如果是正確的引數 會提示
Access violation at address 09303B19. Write of address 09303B19


我用別的開發工具 比如VFP 試了一下是可以呼叫成功的
uj5u.com熱心網友回復:
找了幾臺電腦測驗 XP電腦 32位的 是正常的
Win7 64位和32位都是一樣的錯誤提示
不過VFP雖然呼叫成功 但是退出時也是報記憶體錯誤 是不是這個DLL有問題呀


uj5u.com熱心網友回復:
可能是你的DLL呼叫方式不合適,以前聽其他人說過,好象跟你是同一類的問題uj5u.com熱心網友回復:
看你寫的情況,可能不是stdcal,嘗試用cdcel轉載請註明出處,本文鏈接:https://www.uj5u.com/net/149756.html
標籤:C#
