无法将参数传递给 C# 上的 Clarion Dll

Unnable to pass paramters to Clarion Dll on C#

我有一个 Clarion Dll,我需要从 C# 调用其中的一个过程(我可以访问这两个代码)。

如果我不尝试将任何参数传递给过程,它会完美运行。

这是实际的 Clarion 代码,里面什么都没有,我只是为了测试目的使用它。

AtualizaEstoqueNovo_Teste PROCEDURE  (string pr)           ! Declare Procedure
    CODE

程序MAP声明。

50A5C8 ATUALIZAESTOQUENOVO_TESTE@Fsb

从 C# 端开始,我声明了一个 extern void 函数。

[DllImport("C:\Tests\48\prog\ss007.dll", EntryPoint = "ATUALIZAESTOQUENOVO_TESTE@FSB")]
    public static extern void ATUALIZAESTOQUENOVO_TESTE(string pr);   

我像调用任何其他函数一样调用它

ATUALIZAESTOQUENOVO_TESTE("");

它向我抛出错误“无法找到名为“ATUALIZAESTOQUENOVO_TESTE@FSB”的入口点”

有趣的是,如果我尝试做同样的事情但不使用任何参数,它会起作用。

这是我声明无参数函数的方式:

[DllImport("C:\Tests\48\prog\ss007.dll", EntryPoint = "ATUALIZAESTOQUENOVO_TESTE@F")]
    public static extern void ATUALIZAESTOQUENOVO_TESTE();

我真的不知道我错过了什么。

此外,C# 代码在 Windows 服务中,但我认为这无关紧要

所以,我找到了一种让它工作的方法,你不必传递“@Fsb”。

const UnmanagedType MYSTRING1 = UnmanagedType.BStr; // marshaled bstring

[DllImport(@"C:\Tests\48\prog\ss007.dll", EntryPoint = "ATUALIZAESTOQUENOVO_TESTE")]
public static extern void ATUALIZAESTOQUENOVO_TESTE([MarshalAs(MYSTRING1)] string MYSTRING1);