如何在VB6.0中从.NET COM可见dll中获取Json字段值的值



我有一个C#可见DLL,可以与web服务一起使用。该COM可见DLL正在VB6应用程序中被引用和使用。COM可见DLL有一个函数,它从web服务调用中提取数据,并以Json格式获取数据,然后它还将Json文档反序列化为类对象,并从函数中返回对象id字段(字符串类型(。VB6应用程序调用该函数并尝试获取id值。但它不会检索值。.NET应用程序中使用了相同的COM Dll和相同的函数。(C#(,则可以检索id字段值。

如何在VB6中获得正确的值?非常感谢您的回复。

COM Dll函数代码:


public string TestGETTransactionId(string transaction_id, ref string exceptionMessage)
{
exceptionMessage = "";
string sReturnString = " - 9999";
try
{
string sDomain = HostUrl;
string sNamespace = Namespace;
string sLocationId = LocationID;
string sDeveloperId = DeveloperID;
string sUserId = UserId;
string sUserAPIKey = UserApiId;
string sUserHashKey = UserHashKey;
string sEndPoint = TransactionsRetail;
//query to see if it is Okay...                
sEndPoint = "transactions";
string sUrl = sDomain + @"/" + sNamespace + @"/" + sEndPoint + "?transaction_id=" + transaction_id;              
var client = new RestClient(sUrl);                
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("user-id", sUserId);
request.AddHeader("user-api-key", sUserAPIKey);
request.AddHeader("developer-id", sDeveloperId);
request.AddHeader("Content-Type", "application/json");                
IRestResponse response = client.Execute(request);

TransactionRetail_Rootobject transactionRetail_Rootobject = SimpleJson.DeserializeObject<TransactionRetail_Rootobject>(response.Content);              
if (transactionRetail_Rootobject.transactions != null)
{
sReturnString = transactionRetail_Rootobject.transactions[0].id.ToString();
}         
}
catch (Exception ex)
{              
exceptionMessage = ex.Message + "n" + ex.InnerException;
}
return sReturnString; 
}
VB6 Caller:
Dim sTransaction_api_id As String    
Dim sExceptionMesg As String
Dim sReturnedId As String
'
sTransaction_api_id = "SAMINC_transID001"  ' change this to try

sReturnedId = MyCOMDLL.MyComDllClass(sTransaction_api_id, sExceptionMesg)

MsgBox sReturnedId    'This always return the error code -9999 and I expect to get the true ID field value

MsgBox sExceptionMesg
C# Caller:
private void btnTestGetTransaction_Click(object sender, EventArgs e)
{
string sTransaction_id = "SAMINC_transID001";
string sExceptionMesg = "";

MyCOMDLL.MyComDllClass obj = new MyCOMDLL.MyComDllClass();
string sResult = obj.TestGETTransactionId(sTransaction_id, ref sExceptionMesg);
MessageBox.Show(sResult); // this returns the ID field value fine
textBox1.Text = sResult;
}

您提供的VB6和C#代码似乎存在一些差异。

也就是说,您在VB6:中调用不同的构造函数

sReturnedId = MyCOMDLL.MyComDllClass(sTransaction_api_id, sExceptionMesg)

与C#版本相比:

MyCOMDLL.MyComDllClass obj = new MyCOMDLL.MyComDllClass();

然后在其上调用TestGETTransactionId方法:

string sResult = obj.TestGETTransactionId(sTransaction_id, ref sExceptionMesg);

尝试以下操作:

obj = MyCOMDLL.MyComDllClass()
sResult = obj.TestGETTransactionId(sTransaction_api_id, sExceptionMesg)
MessageBox sResult 

注意:我还没有在IDE中测试过代码。

谢谢大家。

发生的事情是,我不得不使用一种不同的方式来调用web服务。我在.NET中使用WinHttp引用来创建web服务调用的例程,而不是使用RestClient。WinHttp为与VB6的通信提供了更多的透明度。VB6和C#中的调用程序不需要更改。

相关内容

  • 没有找到相关文章

最新更新