调用 c++ 中定义的函数时,来自 c# 的 AccessViolationException图书馆
我们有一个 C++ 库,其中定义和导出了一些方法,并由我们的 .NET (V 3.5) 应用程序使用。在c++库中,函数定义如下
int DLLEXPORT RunAnalysis(long *time, long handle, int *Status)
{
// some code...
}
在 .Net 程序集中
声明
[DllImport("wt3145.dll")]
private static extern int RunAnalysis(ref long Time, long Handle, ref int status);
用法
// Some work..
ErrorCode = RunAnalysis(Time, ref Handle, ref Status);
// Some other work
每次遇到此调用时都会发生 AccesViolationException。仅当我使用 ref 关键字传递第二个参数时,它才得到解决,尽管它不是使用指针传递的。
这种行为有什么具体原因吗???
We have a C++ library where some methods are defined and exported and are being used by our .NET (V 3.5) application. In the c++ library, a function is defined as below
int DLLEXPORT RunAnalysis(long *time, long handle, int *Status)
{
// some code...
}
in .Net assembly
Declaration
[DllImport("wt3145.dll")]
private static extern int RunAnalysis(ref long Time, long Handle, ref int status);
Usage
// Some work..
ErrorCode = RunAnalysis(Time, ref Handle, ref Status);
// Some other work
every time this call is encountered an AccesViolationException occures. it gets solved only when i pass the second parameter with ref
keyword although it is not being passed using a pointer.
Any specific reason for this behavior???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
try
C++ 中的
long
与 C# 中的long
不同。try
long
in C++ is not the same aslong
in C#.