【发布时间】:2021-09-02 00:20:15
【问题描述】:
我试图从 dll 中获取字符串数组。
这是这个 dll 函数的文档。
Request_the_Value_of_ICT_multi_Currency_Bill_Validator()
(a)Input
1. strCurrecy: AnsiString
(b)Return:pData: AnsiString*
pData[0] Value1
pData[1] Value2
...
pData[19] Value3
(c)Example:
AnsiString *pData =
Request_the_Value_of_ICT_multi_Currency_Bill_Validator("AUD");
我在下面尝试了这段代码,返回的是一些非英语语言
IntPtr pData = Request_the_Value_of_ICT_multi_Currency_Bill_Validator("AUD");
string stringB = Marshal.PtrToStringAnsi(pData);
string stringA = Marshal.PtrToStringUni(pData);
这是 dll
[DllImport("PS3_DLL.dll", EntryPoint = "Request_the_Value_of_ICT_multi_Currency_Bill_Validator", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr Request_the_Value_of_ICT_multi_Currency_Bill_Validator(string strCurrency);
这是我反汇编dll得到的功能。我真的不知道这是什么意思
更新:我终于找到了正确的代码!
IntPtr pData = ictdll.Request_the_Country_code_of_ICT_multi_Currency_BA();
IntPtr[] pGetData = new IntPtr[9];
Marshal.Copy(pData, pGetData, 0, pGetData.Length);
string[] currency = new string[9];
for (int i = 0; i < 9; i++)
{
currency[i] = Marshal.PtrToStringAnsi(pGetData[i]);
}
【问题讨论】:
-
我们不知道DLL的接口是什么。
-
@DavidHeffernan 这也是我的问题之一,因为我没有 dll 接口。
-
我们看不到它,它不在问题中,所以没有人可以回答这个问题。也许该链接中有某些内容,但谁愿意关注非站点链接?如果您有额外的信息,请在此处提供,而不是在站外链接中。
-
@DavidHeffernan 我已经更新了我的问题。我复制了文档的内容并将其包含在我上面的问题中。
-
这并没有真正详细地指定接口