无法将参数传递给 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);
我有一个 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);