我用PB呼叫C#撰寫的Dll類別庫,
c#代碼如下,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace PB_tests
{
[Guid("B3798F4F-A0FF-4833-945A-C7BF140ADF1A")] //利用GUID生成器隨機生成,大家上網查如何生成,必須
public interface CallParamers
{
[DispId(1)]
string PBCall(string para, ref int result);
}
[ComVisible(true)]
[Guid("0EA797E2-4472-4B30-A11D-1F7302B874C1")] //利用GUID生成器隨機生成,大家上網查如何生成,必須
[ClassInterface(ClassInterfaceType.None)]
public class Class1 : CallParamers
{
public string PBCall(string para, ref int result)
{
result = 1234;
char[] tmp = para.ToCharArray();
Array.Reverse(tmp);
return new string(tmp);
}
public static void Main(string[] args)
{
}
}
}
按照網上的做法在設定com可見,同時為com互操作注冊
然后編譯生成dll
如下是PB代碼
string messages
string test = "asd123"
int flag, returns
OleObject Oleb
Oleb = Create OLEObject
flag = Oleb.ConnectToNewObject("PB_tests.Class1") //CallByPB為C#中命名空間(namespace) ,Class1為C#中類名
if flag <> 0 then
MessageBox("提示", string(flag)+" PB呼叫C#COM組件失敗,回傳訊息")
return
end if
messages =Oleb.PBCall(test, ref returns)
MessageBox("提示", messages+'~n'+string(returns))
然后本機運行ok,一切正常。
然后我們拷貝dll到另外一臺機器,已安裝.net 框架。
使用regasm.exe注冊dll。
然后再次運行缺得到-3的狀態提示,

請教各位各位大神,請問這個應該如何解決。謝謝。
uj5u.com熱心網友回復:
求救版主,在線等uj5u.com熱心網友回復:
還是機器的環境問題,看是32位還是64位,注冊方法不一樣的。uj5u.com熱心網友回復:
是不是和目標機器上已注冊的組件GUID沖突了,可以查找下注冊表中的guid看看uj5u.com熱心網友回復:
沒有沖突,換了guid也是一樣的情況。
uj5u.com熱心網友回復:
兩個機器都是64位的作業系統windows 7
uj5u.com熱心網友回復:
PB編譯成exe運行就沒有問題了轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10083.html
標籤:腳本語言
