我怎么称呼一个C++;来自C#/WPF项目的DLL
我有以下代码:我怎么称呼一个C++;来自C#/WPF项目的DLL,c#,c++,wpf,C#,C++,Wpf,我有以下代码: namespace WPFMuskTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { [DllImport ("myDll.DLL", EntryPoint =
namespace WPFMuskTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
[DllImport
("myDll.DLL",
EntryPoint = "?Func1@FUllNameCopiedFromDependancyWalker",
CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl
)
]
public static extern System.IntPtr Func1(out System.IntPtr handle, int type, out DateTime date);
public MainWindow()
{
InitializeComponent();
//
//
//
}
private void button1_Click(object sender, RoutedEventArgs e)
{
System.IntPtr MainParam;
int thetype = 1
DateTime date;
System.IntPtr res = GetFxIRMoveForDate(out MainParam, thetype _til, out date);
}
}
}
类型为“System.AccessViolationException”的未处理异常
谁能告诉我为什么?
< P>默认情况下,C++不使用<代码> CDECL < /Cule>调用约定,它使用<代码> STDCALL> /COD>。您可能会更成功地将C包装器写入C++ API并调用它,因为C具有定义良好的.</P><>编辑:再次查看代码,我怀疑
<>编辑:再次查看代码,我怀疑
myclass
作为指针传递。抱歉,您已更正了输入错误-请重新查看!我们真的需要看到C++中的方法的签名,知道您是否正确键入了DLLIMPART。添加了C++原型——我猜这就是您的意思?您可以提供“代码>类型-< /Calp>和<代码> DATEYTYPE < /COD>?<代码> MyClass myclass < /COD>和<代码> ItpTR句柄< /C> >,每个宏可能不对应。其他,因为myclass
没有作为指针传递。对不起,我已经更正了一个输入错误-请再看一看!那么,将调用约定更改为CallingConvention.Stdcall是否可行呢?我试过了,错误也是一样的。我不确定如果我在C中为我在C#中的包装器创建了另一个包装器库,它是否会运行良好-这当然可以做到?那么将调用约定更改为CallingConvention.Stdcall是否应该工作?我试过了,错误也是一样的。我不确定如果我在C中创建另一个包装器库,让我在C#中的包装器正常工作,它是否会运行良好-这肯定可以做到吗?
namespace1
{
namespace2
{
void func1(MyClass &myclass, const TYPE& type, const DATE_TYPE& date);
}
}