調(diào)用.Net的
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),聶榮企業(yè)網(wǎng)站建設(shè),聶榮品牌網(wǎng)站建設(shè),網(wǎng)站定制,聶榮網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,聶榮網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
程序集
還是
COM組件
,
這是不同的,
如果你用Visual
Studio,那在項(xiàng)目的引用那里直接引用就可以了,.Net程序集和COM組件在不同的Tab頁里。
COM組件要先注冊(cè)才能看到
regsvr32
com.dll
我想了兩種思路,winform沒有findControl,只有個(gè)this.Controls.Contains("textBox1"),因此除了遍歷沒辦法了。。。
思路1:遍歷Controls,具體你自己完善下,
if(this.Controls.Count0)
{
foreach(Control c in this.Controls)
if(c.GetTepy==Tepyof(TextBox))
string str += ((TextBox)c).Text;
}
'vb.net的串口接收數(shù)據(jù)要用到委托
Delegate Sub SetTextCallback(ByVal InputString As String) '聲明一個(gè)委派類,并聲明符合函數(shù)參數(shù)有一個(gè),而其型態(tài)是字符串
Private Sub ShowString(ByVal comData As String)
txt_Re.Text = comData '將收到的數(shù)據(jù)入接收文字框中--- txt_Re.Text 是接收用的文本框
txt_Re.SelectionStart = txt_Re.Text.Length
txt_Re.ScrollToCaret()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived‘自動(dòng)接收事件
Dim inData As String = SerialPort1.ReadExisting
Dim d As New SetTextCallback(AddressOf ShowString)
Invoke(d, inData)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '發(fā)送指令
SerialPort1.Write("123")
End Sub
為什么增加的回答這么久還沒顯示。
我想知道你為什么要枚舉這些方法,是需要打印出來還是只是為了查看和調(diào)用?
1,如果只是為了查看和調(diào)用的話,不需要用代碼就能知道了。
打開VS,視圖-》對(duì)象瀏覽器。然后開了后,點(diǎn)瀏覽右邊的“。。?!保_了后。選COM活頁,再在里面選ThunderAgent 1.0 Type Library。再點(diǎn)添加。
添加好之后。在左邊的瀏覽窗口內(nèi)就有了,展開THUNDERAGENTLib下面有幾個(gè)類和接口,展開類就有方法了。
2,如果是需要用代碼枚舉并打印。網(wǎng)上有相關(guān)的代碼,C#寫的。我就不帖了。自己搜一下。改成vb.net相信應(yīng)該不會(huì)太難。
祝你好運(yùn)。
一般VB.NET調(diào)用DLL可以通過Declare 語句在模塊級(jí)用于聲明對(duì)動(dòng)態(tài)鏈接庫 (DLL) 中的外部過程的引用。
Private Declare Sub
myFunc1 Lib "mylib.dll"
(ByVal strName As String)
但是,VB.NET,C#.NET創(chuàng)建的DLL是個(gè)類庫,不能生成標(biāo)準(zhǔn)的 DLL 文件,不能采用declare ()的方式。應(yīng)該在解決方案資源管理器下的需要引用的項(xiàng)目的引用欄點(diǎn)擊鼠標(biāo)右鍵--添加對(duì)這個(gè)類庫[mylib.dll]的引用即可。
以下為VB.NET調(diào)用DLL代碼示例:
DllImport("kcomm.dll", CharSetCharSet:
=CharSet.Ansi, SetlastError:=True)
Private Shared Function gettxt(ByVal
port As Integer, ByVal wait As
Integer, ByVal _date As Long,
ByVal _time As Long, ByVal
filename As String) As Integer
End Function
根據(jù)實(shí)際情況更改你的DLL名稱、函數(shù)名、參數(shù)名和類型。
VB.NET調(diào)用DLL的只是COM組件,無法作為輸出函數(shù)的DLL,其實(shí)這只是個(gè)錯(cuò)誤的說法。其實(shí)MS非常狡猾,如果你是個(gè)VB瘋狂發(fā)燒友的話,應(yīng)該早就狂試出這種可以創(chuàng)建輸出函數(shù)的DLL的方法。
VB編譯文件實(shí)際上采取了兩次編譯的方法,首先是調(diào)用C2.exe產(chǎn)生*.OBJ文件,然后調(diào)用Link.EXE連接。如果在LINK的時(shí)候添加EXPORT選項(xiàng),實(shí)際上是可以輸出函數(shù)的。但是,在VB的工程選項(xiàng)中將這些屏蔽了。而且過分的是:VB在Build完成后會(huì)將OBJ文件刪除,這樣就無法手動(dòng)通過Link來創(chuàng)建我們需要的DLL了。不過我找到一個(gè)比較齷鹺的變通的方法,就是先創(chuàng)建一個(gè)Exe工程,在Form_Load事件里面寫下面的語句:
Sub Main
If MsgBox("哈哈",
vbOKCancel) = vbOK Then
Shell "link2.exe "
Command$
End If
End Sub
然后編譯為L(zhǎng)inkTemp.EXE,接下來將LINK.EXE改名為L(zhǎng)ink2.exe,將LinkTemp.EXE改名為L(zhǎng)ink.EXE。這樣在VB調(diào)用Link.EXE時(shí)會(huì)彈出對(duì)話框,處理就會(huì)中斷。這時(shí)就可以有機(jī)會(huì)將OBJ文件拷貝出來了。
然后我創(chuàng)建了一個(gè)ActiveX DLL工程,在這個(gè)工程里面添加一個(gè)Module并創(chuàng)建一個(gè)Public函數(shù)mathadd:
Public Function mathadd
(ByVal a As Long, ByVal
b As Long) As Long
mathadd = a + b
End Function
編譯這個(gè)工程,在Link的時(shí)候就會(huì)中斷。然后把創(chuàng)建的Class1.obj、Module1.obj、Project1.obj備份出來。然后就可以調(diào)用Link2.exe連接OBJ到DLL了,我的連接代碼是:
Link2.exe "e:\\vbdll\\Class1.obj"
"e:\\vbdll\\Module1.obj"
"e:\\vbdll\\Project1.obj"
"E:\\Program Files\\Microsoft
Visual Studio\\VB98\\VBAEXE6.LIB"
/ENTRY:__vbaS /EXPORT:mathadd /OUT:
"e:\\vbdll\\ProjectOK.dll"
/BASE:0x11000000 /SUBSYSTEM:
WINDOWS,4.0 /VERS
注意里面的/ENTRY和/EXPORT開關(guān),/EXPORT開關(guān)聲明了輸出函數(shù)mathadd。這樣就大功告成了,可以被其他語言引入,例如在VB中,只需要:
Private Declare Function mathadd
Lib "e:\\vbdll\\ProjectOK.dll"
(ByVal a As Long, ByVal b As
Long) As Long
創(chuàng)建結(jié)構(gòu)體,用結(jié)構(gòu)體傳輸數(shù)據(jù):
Public Structure InValue
Public P As 類型
Public Q As 類型
'其他值定義
End Structure
Public Structure OutValue
Public A() As 類型
Public B As 類型
'其他值定義
End Structure
把Dll內(nèi)的方法改為:
Public Function calculation(value As InValue) As OutValue
Dim [out] As New OutValue
'處理函數(shù)
Return [out]
End Function
引用:
dim ffun as new pla.tua
dim inval as invalue
in.** = **
dim outp as outvalue = ffun.calculation(inval)