C#调用VC的dll时报
对 PInvoke 函数“WindowsApplication1!WindowsApplication1.ClsIni::AddCustomPaper”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
大哥们,还有一篇贴在后面没人理,这里问题解决了,那边100分一起给。
快来救人啊,快死人了。求求你们了。
对 PInvoke 函数“WindowsApplication1!WindowsApplication1.ClsIni::AddCustomPaper”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
大哥们,还有一篇贴在后面没人理,这里问题解决了,那边100分一起给。
快来救人啊,快死人了。求求你们了。
解决方案 »
- jpg或其他格式的图片怎么处理呢?
- 求正则表达式
- Visual C# + SQL Server数据库开发与实例 这本书的光盘谁有,我的丢了。
- SQL Server2005数据删了一条数据,可不可以恢复啊?
- HashTable问题,产生异常是什么原因呢?
- 200+列数据库操作
- Winform中更改数据后对DataGrid的重新邦定问题
- Infragistics2.WebUI.UltraWebTab.v7.2.dll控件调不出来
- 为什么说ToString()不会进行装箱操作呢?
- 请教,怎样把DataSet中的数据写入数据库?(100分)
- User32.dll FindWindow问题
- 服務啓動的時候怎樣顯示頁面
[DllImport("PrintCtrl.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern Boolean AddCustomPaper(
[MarshalAs(UnmanagedType.LPStr)]ref string Printer,
[MarshalAs(UnmanagedType.LPStr)]ref string PaperName,
[MarshalAs(UnmanagedType.I8)]long width,
[MarshalAs(UnmanagedType.I8)]long height,
[MarshalAs(UnmanagedType.I8)]long left,
[MarshalAs(UnmanagedType.I8)]long right,
[MarshalAs(UnmanagedType.I8)]long top,
[MarshalAs(UnmanagedType.I8)]long bottom
);
应该是要加上MarshalAs(UnmanagedType.I8)]这些个东西吧。是什么意思呢。
望指点
不过这里
[MarshalAs(UnmanagedType.LPStr)]ref string Printer,
[MarshalAs(UnmanagedType.LPStr)]ref string PaperName,
[MarshalAs(UnmanagedType.LPStr)]string Printer,
[MarshalAs(UnmanagedType.LPStr)]string PaperName,
试试
[MarshalAs(UnmanagedType.LPStr)]
......
我想应该是这样的吧,或者不写
CallingConvention = CallingConvention.StdCall
private static extern Boolean AddCustomPaper(
[In,Out,MarshalAs(UnmanagedType.AnsiBStr)]ref string Printer,
[In,Out,MarshalAs(UnmanagedType.AnsiBStr)]ref string PaperName,
[In,MarshalAs(UnmanagedType.I8)]long width,
[In, MarshalAs(UnmanagedType.I8)]long height,
[In, MarshalAs(UnmanagedType.I8)]long left,
[In, MarshalAs(UnmanagedType.I8)]long right,
[In, MarshalAs(UnmanagedType.I8)]long top,
[In, MarshalAs(UnmanagedType.I8)]long bottom
);
public bool test( ref string printer ,ref string paperName)
{
long w, h, l, r, t, b; w = 2000;
h = 1500;
l = 10;
r = 10;
t = 20;
b = 20; bool rb = AddCustomPaper(ref printer, ref paperName, w,h,l,r,t,b);
if (rb)
{
MessageBox.Show("that is ok");
}
else
{
MessageBox.Show("Error");
}
return rb;
}
看看我哪错了吧。
不是c#的
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
CPrinter p;
SIZE s;
RECT r;
s.cx = nWidth;
s.cy = nHeight;
r.left = nLeft;
r.right = nRight;
r.top = nTop;
r.bottom = nTop;
return p.AddCustomPaper(szPrinterName, szPaperName, s, r);
}BOOL CPrinter::AddCustomPaper(LPTSTR szPrinterName, PAPERNAME szPaperName, SIZE PaperSize, RECT rcPrintableMargin)
{
BOOL bOk = FALSE;
if (IsWindowsNT()) //Windows NT4/2000/XP才支持
{
FORM_INFO_1 fi1;
fi1.Flags = FORM_USER;
fi1.pName = (LPTSTR)szPaperName;
fi1.Size.cx = PaperSize.cx * 100;
fi1.Size.cy = PaperSize.cy * 100;
fi1.ImageableArea.left = rcPrintableMargin.left * 100;
fi1.ImageableArea.top = rcPrintableMargin.top * 100;
fi1.ImageableArea.right = fi1.Size.cx - rcPrintableMargin.right * 100;
fi1.ImageableArea.bottom = fi1.Size.cy - rcPrintableMargin.bottom * 100;
HANDLE hPrinter = GetPrinterHandle(szPrinterName);
if (hPrinter)
{
bOk = (SetForm(hPrinter, (LPSTR)szPaperName, 1, (LPBYTE)&fi1) || //已存在该类型纸张则更改
AddForm(hPrinter, 1, (LPBYTE)&fi1)); //否则添加此自定义纸张
ClosePrinter(hPrinter);
}
}
return bOk;
}
这是相关的两个方法。
long &是什么类型??郁闷啊。。
现在可以调用到VC里的方法,但是出来的东西全为false郁闷,超级。
请问要如何写呢
就像PB里的string printerlist = space(512)一样,
请各位大哥来帮帮。好可怜啊,什么东西都没解决好,到处出问题
我从A学到B,快到C了.
1. C#中的调用代码
[DllImport("xxx.dll")]
public static extern uint IoControlBOOL(uint uiHandle,
[MarshalAs(UnmanagedType.BStr)]string strCommand,
[MarshalAs(UnmanagedType.Bool)]ref bool VARIANT_BOOL);
2. DLL中的代码(C++的)
EXPORT_API HRESULT IoControlBOOL(UINT uiHandle,
BSTR Command,
bool *pArgument);