3

我正在开发 Amibroker C# 插件项目。Amibroker SDK 是用 C++ 编写的,但是我使用的 C# 插件正是 Amibroker C++ 所做的C# Plugin link

C# 插件中的所有内容都可以正常工作,除了一个用 C++ 编写的函数:

PLUGINAPI struct RecentInfo* GetRecentInfo(LPCTSTR ticker)
{
   //Process & return RecentInfo* (RecentInfo is a structure)
}

在 C# 标准插件中,它已被转换为这种方式

public RecentInfo GetRecentInfo(string ticker)
{
    //Process & Return RecentInfo
}

不幸的是,Amibroker 应用程序因这种错误的转换而崩溃。所以我确实尝试将它转换为让 Amibroker App 正常工作的方式,但多次失败这是我迄今为止尝试过的:

尝试1:

unsafe public RecentInfo* GetRecentInfo(string ticker)
{
    //Process & Return RecentInfo* (RecentInfo structure is declared as unsafe)
}

影响:

Amibroker 应用程序无法加载

尝试2:

public IntPtr GetRecentInfo(string ticker)
{
    //Process & Return Pointer using Marshal.StructureToPtr
}

影响:

Amibroker 应用程序无法加载

尝试 3:

public void GetRecentInfo(string ticker)
{
    //Useless becoz no return type
}

影响:

Amibroker 加载并正确调用函数,但如何返回结构指针

所以,我挠头想找出 C# 中 C++ 函数的确切转换

4

1 回答 1

2

如果它是完全用c#编写的,那就很好了,认为实现中存在问题而不是调用

public RecentInfo GetRecentInfo(string ticker)
{
      RecentInfo rc;
    //Process & Return RecentInfo
      return rc;
}

或者这个,(你也可以使用 ref )

public void GetRecentInfo(string ticker,out RecentInfo rc )
{
rc=new RecentInfo();
....process

 return ;
}
于 2013-07-03T04:45:42.267 回答