【问题标题】:Returning long pointer value from unmanaged DLL entry point从非托管 DLL 入口点返回长指针值
【发布时间】:2014-09-30 12:06:52
【问题描述】:

我的非托管 DLL 中有一个入口点,这是来自其 C 代码的代码

void *__cdecl entryp(int a1, int a2, __int64 a3, signed int a4, int a5)
{
  void *v6; 
  /..../
  /..../

  return v6;
}

我在我的 C# 项目中使用 dllimport

[DllImport("unmanaged.dll", EntryPoint = "entryp",CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe long* entryp(byte[] bData, uint length, ushort width, ushort heigth, uint nMaxCode, short anaLevel);

但问题是该方法不返回任何内容 我的代码出了什么问题?感谢您阅读我的问题

【问题讨论】:

  • 问题是“v6 指向什么?”返回局部变量的地址是未定义的行为。
  • 这些方法有完全不同的参数。这是问题中的错字吗?
  • 有什么区别? @dbc
  • @masbro - 一个是int a1, int a2, __int64 a3, signed int a4, int a5,另一个是byte[] bData, uint length, ushort width, ushort heigth, uint nMaxCode, short anaLevel
  • 不是因为这两种方法是用不同的语言编写的,所以需要对其参数进行转换

标签: c# c++ pointers dll unmanaged


【解决方案1】:

必须导出 DLL 中的代码,所以我希望声明是:

void* __declspec(dllexport) entryp(int a1, int a2, __int64 a3, signed int a4, int a5)
{
  //...
}

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 2019-01-08
    • 2011-10-03
    • 2013-09-29
    • 2023-04-02
    • 2011-11-11
    • 2010-10-14
    • 2019-12-08
    相关资源
    最近更新 更多