主頁 > 軟體工程 > VB.net能用VB的*.bas模塊嗎

VB.net能用VB的*.bas模塊嗎

2020-09-16 01:13:04 軟體工程

現在有一個阿爾泰資料2813采集卡,只給出了VC和VB的程式實體,但是我想用VB.net來寫,不知道*.bas能不能用在Vb.net中?或者修改一下語法和關鍵字能不能用?
非軟體專業,所以不太清楚,現在課題需要撰寫簡單的控制程式,請各位大神支招,不勝感激!!
下面給出模塊檔案“USB2813.bas”檔案:

uj5u.com熱心網友回復:

Attribute VB_Name = "Driver_Module"
'***********************************************************
' 用于AD采集的引數結構
Type USB2813_PARA_AD
    FirstChannel    As Long  ' 首通道,取值范圍為[0, 15]
    LastChannel     As Long  ' 末通道,取值范圍為[0, 15]
    InputRange      As Long
    GroundingMode   As Long
End Type

' AD硬體引數(USB2813_PARA_AD)中的InputRange模擬量輸入范圍所使用的選項
Public Const USB2813_INPUT_N10000_P10000 = &H0   ' ±10000mV(默認配置)
Public Const USB2813_INPUT_N5000_P5000 = &H1     ' ±5000mV
Public Const USB2813_INPUT_N0_P10000 = &H2       ' 0~10000mV

' AD引數(USB2813_PARA_AD)中的GroundingMode使用的模擬信號接地方式選項
Public Const USB2813_GNDMODE_SE = &H0        ' 單端方式(SE:Single end)
Public Const USB2813_GNDMODE_DI = &H1        ' 雙端方式(DI:Differential)

'***********************************************************
' 8253計數器控制字
Type USB2813_PARA_CNT       ' 計數器控制字(CONTROL)
    OperateType As Byte     ' 操作型別
    CountMode   As Byte     ' 計數方式
    CountType   As Byte     ' 計數型別
End Type

' USB2813_PARA_CNT_CTRL引數結構體各成員使用的選項
' 操作型別(OperateType)
Public Const USB2813_OPT_TYPE_0 = &H0   ' 計數器鎖存操作
Public Const USB2813_OPT_TYPE_1 = &H1   ' 只讀/寫低位元組
Public Const USB2813_OPT_TYPE_2 = &H2   ' 只讀/寫高位元組
Public Const USB2813_OPT_TYPE_3 = &H3   ' 先讀/寫低位元組,后讀/寫高位元組
' 計數方式(CountMode)
Public Const USB2813_CNT_MODE_0 = &H0   ' 計數方式0,計數器結束中斷方式
Public Const USB2813_CNT_MODE_1 = &H1   ' 計數方式1,可編程單次脈沖方式
Public Const USB2813_CNT_MODE_2 = &H2   ' 計數方式2,頻率發生器方式
Public Const USB2813_CNT_MODE_3 = &H3   ' 計數方式3,方波頻率發生器方式
Public Const USB2813_CNT_MODE_4 = &H4   ' 計數方式4,軟體觸發選通方式
Public Const USB2813_CNT_MODE_5 = &H5   ' 計數方式5,硬體觸發選通方式
' 計數型別(BCD)
Public Const USB2813_CNT_TYPE_BIN = &H0   ' 計數型別0,二進制計數
Public Const USB2813_CNT_TYPE_BCD = &H1   ' 計數型別1,BCD碼計數

'***********************************************************
' 用于開關量輸出的引數結構
Type USB2813_PARA_DO   ' 數字量輸出引數
    DO0    As Byte   ' 0通道
    DO1    As Byte   ' 1通道
    DO2    As Byte   ' 2通道
    DO3    As Byte   ' 3通道
    DO4    As Byte   ' 4通道
    DO5    As Byte   ' 5通道
    DO6    As Byte   ' 6通道
    DO7    As Byte   ' 7通道
End Type

'***********************************************************
' 用于開關量輸入的引數結構
Type USB2813_PARA_DI      ' 數字量輸入引數
    DI0    As Byte   ' 0通道
    DI1    As Byte   ' 1通道
    DI2    As Byte   ' 2通道
    DI3    As Byte   ' 3通道
    DI4    As Byte   ' 4通道
    DI5    As Byte   ' 5通道
    DI6    As Byte   ' 6通道
    DI7    As Byte   ' 7通道
End Type

'***********************************************************
' CreateFileObject中的Mode引數使用的檔案操作方式控制字(可通過或指令實作多種方式并操作)
Public Const USB2813_modeRead = &H0            ' 只讀檔案方式
Public Const USB2813_modeWrite = &H1           ' 只寫檔案方式
Public Const USB2813_modeReadWrite = &H2       ' 既讀又寫檔案方式
Public Const USB2813_modeCreate = &H1000       ' 如果檔案不存可以創建該檔案,如果存在,則重建此檔案,并清0

'***********************************************************
' 驅動函式介面

'######################## 常規通用函式 #################################
Declare Function USB2813_CreateDevice Lib "USB2813" (Optional ByVal DeviceLgcID As Integer = 0) As Long     ' 創建設備物件(使用設備邏輯號)
Declare Function USB2813_CreateDeviceEx Lib "USB2813" (Optional ByVal DevicePhysID As Integer = 0) As Long  ' 創建設備物件(使用設備物理號), DevicePhysID指定的物理號由板上DID拔碼器實作)
Declare Function USB2813_GetDeviceCount Lib "USB2813" (ByVal hDevice As Long) As Integer             ' 取得USB2813在系統中的設備數量
Declare Function USB2813_GetDeviceCurrentID Lib "USB2813" (ByVal hDevice As Long, ByRef DeviceLgcID As Long, ByRef DevicePhysID As Long) As Boolean ' 取得當前設備的物理ID號和邏輯ID號
Declare Function USB2813_ListDeviceDlg Lib "USB2813" () As Boolean                               ' 用對話框串列系統當中的所有USB2813設備
Declare Function USB2813_ResetDevice Lib "USB2813" (ByVal hDevice As Long) As Boolean                ' 復位整個USB設備
Declare Function USB2813_ReleaseDevice Lib "USB2813" (ByVal hDevice As Long) As Boolean              ' 設備句柄

'####################### AD資料讀取函式 #################################
Declare Function USB2813_InitDeviceAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean

Declare Function USB2813_ReadDeviceAD Lib "USB2813" (ByVal hDevice As Long, ByRef ADBuffer As Integer, ByVal nReadSizeWords As Long, ByRef nRetSizeWords As Long) As Boolean          ' 實際回傳資料的長度(字)

Declare Function USB2813_ReleaseDeviceAD Lib "USB2813" (ByVal hDevice As Long) As Boolean  ' 停止AD采集,釋放AD物件所占資源

'################# AD的硬體引數操作函式 ########################
Declare Function USB2813_SaveParaAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean
Declare Function USB2813_LoadParaAD Lib "USB2813" (ByVal hDevice As Long, ByRef pADPara As USB2813_PARA_AD) As Boolean

'####################### DA資料輸出函式 #################################
' 適于大多數普通用戶,這些介面最簡單、最快捷、最可靠,讓用戶不必知道設備
' 低層復雜的硬體控制協議和繁多的軟體控制編程,僅用下面一個函式便能輕
' 松實作高速、連續的DA資料輸出
Declare Function USB2813_WriteDeviceDA Lib "USB2813" (ByVal hDevice As Long, ByVal nDALsb As Integer, ByVal nDAChannel As Integer) As Boolean

'##################### 計數器控制函式 ##########################
Declare Function USB2813_InitDeviceCNT Lib "USB2813" (ByVal hDevice As Long, ByRef pCNTPara As USB2813_PARA_CNT, ByVal InitCNTVal As Integer, ByVal nCNTChannel As Integer) As Boolean

Declare Function USB2813_GetDeviceCNT Lib "USB2813" (ByVal hDevice As Long, ByRef CNTValue As Long) As Boolean
'####################### 數字I/O輸入輸出函式 #################################
Declare Function USB2813_SetDeviceDO Lib "USB2813" (ByVal hDevice As Long, ByRef pDOPara As USB2813_PARA_DO) As Boolean                ' 開關狀態

Declare Function USB2813_GetDeviceDI Lib "USB2813" (ByVal hDevice As Long, ByRef pDIPara As USB2813_PARA_DI) As Boolean                ' 開關狀態

'########################## 檔案操作函式 ####################################
Declare Function USB2813_CreateFileObject Lib "USB2813" (ByVal hDevice As Long, ByVal strFileName As String, ByVal Mode As Integer) As Long               ' 檔案操作方式
Declare Function USB2813_WriteFile Lib "USB2813" (ByVal hFileObject As Long, ByRef pDataBuffer As Integer, ByVal nWriteSizeBytes As Long) As Boolean      ' 緩沖區大小(位元組)

Declare Function USB2813_ReadFile Lib "USB2813" (ByVal hFileObject As Long, ByRef pDataBuffer As Integer, ByVal OffsetBytes As Long, ByVal nReadSizeBytes As Long) As Boolean      ' 從偏移位置開始讀的位元組數

Declare Function USB2813_SetFileOffset Lib "USB2813" (ByVal hFileObject As Long, ByVal nOffsetBytes As Long) As Boolean     ' 檔案偏移位置(以字為單位)

Declare Function USB2813_GetFileLength Lib "USB2813" (ByVal hFileObject As Long) As Long ' 取得指定檔案長度(位元組)

Declare Function USB2813_ReleaseFile Lib "USB2813" (ByVal hFileObject As Long) As Boolean
Declare Function USB2813_GetDiskFreeBytes Lib "USB2813" (ByRef strDiskName As String) As Currency  ' 獲得指定盤符的磁盤空間(注意使用64位變數)

'############################ 執行緒操作函式 ################################
Declare Function USB2813_CreateSystemEvent Lib "USB2813" () As Long  ' 創建內核系統事件物件
Declare Function USB2813_ReleaseSystemEvent Lib "USB2813" (ByVal hEvent As Long) As Boolean ' 釋放內核事件物件
Declare Function USB2813_CreateVBThread Lib "USB2813" (ByRef hThread As Long, ByVal StartThread As Long) As Boolean
Declare Function USB2813_TerminateVBThread Lib "USB2813" (ByVal hThreadHandle As Long) As Boolean

'################# 其他附加函式 ########################
Declare Function USB2813_EnableShowMessage Lib "USB2813" (Optional ByVal bShowMessage As Boolean = False) As Boolean ' 是否讓驅動程式自動彈出錯誤資訊提示對話框
Declare Function USB2813_DelayTimeUs Lib "USB2813" (ByVal nUs As Integer)
Declare Function USB2813_kbhit Lib "USB2813" (void) As Boolean

uj5u.com熱心網友回復:

試了看看,估計不行的

uj5u.com熱心網友回復:

印象中VB.NET中“使用API的宣告方式”的寫法,跟VB6中完全不同。
(具體是什么樣,我也不清楚,從來沒有寫過VB.NET的代碼)
至少,有關“API宣告”那一部分,得完全改寫……

uj5u.com熱心網友回復:

謝謝上面兩位大神,看來即使能改也得費好大勁,那我就不折騰VB.net了,直接研究研究里面自帶的C++實體吧。

uj5u.com熱心網友回復:

不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

uj5u.com熱心網友回復:

需要做一點微調,比如vb6里,integer是雙位元組,long是4位元組,代碼改成.net需要對應改成 int16,integer(或int32);結構體在.net里是 Structure 不再是Type。總體講差別不大。建議先試試看,新建vb.net 工程以后,新增一個Module檔案,把這個代碼放進去,初步改一遍后跑跑看。

uj5u.com熱心網友回復:

參考 6 樓 Runnerchin 的回復:
需要做一點微調,比如vb6里,integer是雙位元組,long是4位元組,代碼改成.net需要對應改成 int16,integer(或int32);結構體在.net里是 Structure 不再是Type。總體講差別不大。建議先試試看,新建vb.net 工程以后,新增一個Module檔案,把這個代碼放進去,初步改一遍后跑跑看。
好的,我試試看,謝謝哈

uj5u.com熱心網友回復:

參考 5 樓 zhao4zhong1 的回復:
不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

辛苦了,謝謝哈。思路對我很受用。

uj5u.com熱心網友回復:

應該不能吧....

uj5u.com熱心網友回復:

參考 9 樓 qq_35913527 的回復:
Quote: 參考 5 樓 zhao4zhong1 的回復:

不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

辛苦了,謝謝哈。思路對我很受用。

例子代碼給你繼續“受用”吧:
//test.c 本程式演示兩個行程之間通過臨時文本檔案交換資料實作間接呼叫
//A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
//B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
//A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>

uj5u.com熱心網友回復:

參考 11 樓 zhao4zhong1 的回復:
Quote: 參考 9 樓 qq_35913527 的回復:

Quote: 參考 5 樓 zhao4zhong1 的回復:

不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

辛苦了,謝謝哈。思路對我很受用。

例子代碼給你繼續“受用”吧:
//test.c 本程式演示兩個行程之間通過臨時文本檔案交換資料實作間接呼叫
//A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
//B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
//A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>

老趙真是老師?
索性多聊點吧,如果A發出了5個請求,B處理到第3個,然后A又需要發5個請求怎么辦?你的代碼完全沒有考慮競爭,更不用說操作的原子性。分布式不是你想得那么簡單三兩句代碼就行的。一旦操作頻繁起來,程式之間搶資源要搶到打破頭,解決了鎖的問題,還有一個傳輸效率的問題,你肯定也沒有考慮過,事實上檔案是效率最低的,一旦有高頻的、大體積的資料互動,資源都消耗在IO上,這個問題你肯定也沒有考慮過。一板一眼地給學生做演示的時候,我覺得你寫起代碼肯定是信手拈來,但是老趙,真實的專案里不會這樣做的,你覺得復制粘貼的這些語錄都是你的心得,但是這些只是你拍腦門憑空拍出來的東西,你以為有些事很傻,但是反而是你想得太簡單。更糟糕的是,你一邊到處宣傳這些一邊吸引別人的關注,覺得自己是在傳道,很有滿足感,可事實上你到呼叫這套想當然的東西把多少人給帶歪了?
還有,vb的歸vb,.net的歸.net,java的歸java,c的歸c……很多次見你為了甩代碼而甩代碼,這樣不是合適的討論方式。不然你回頭再翻一翻你的回帖,是不是真正在討論問題,是不是對題主有參考價值。
你要想驗證一下也很簡單,去.net版塊,java版塊,python版塊連續復制粘貼刷三天,看看大家會怎么回復你。

uj5u.com熱心網友回復:

無profiler不要談效率!!尤其在這個云計算、虛擬機、模擬器、CUDA、多核 、多級cache、指令流水線、多種存盤介質、……滿天飛的時代!

uj5u.com熱心網友回復:

參考 12 樓 Runnerchin 的回復:
Quote: 參考 11 樓 zhao4zhong1 的回復:

Quote: 參考 9 樓 qq_35913527 的回復:

Quote: 參考 5 樓 zhao4zhong1 的回復:

不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

辛苦了,謝謝哈。思路對我很受用。

例子代碼給你繼續“受用”吧:
//test.c 本程式演示兩個行程之間通過臨時文本檔案交換資料實作間接呼叫
//A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
//B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
//A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>

老趙真是老師?
索性多聊點吧,如果A發出了5個請求,B處理到第3個,然后A又需要發5個請求怎么辦?你的代碼完全沒有考慮競爭,更不用說操作的原子性。分布式不是你想得那么簡單三兩句代碼就行的。一旦操作頻繁起來,程式之間搶資源要搶到打破頭,解決了鎖的問題,還有一個傳輸效率的問題,你肯定也沒有考慮過,事實上檔案是效率最低的,一旦有高頻的、大體積的資料互動,資源都消耗在IO上,這個問題你肯定也沒有考慮過。一板一眼地給學生做演示的時候,我覺得你寫起代碼肯定是信手拈來,但是老趙,真實的專案里不會這樣做的,你覺得復制粘貼的這些語錄都是你的心得,但是這些只是你拍腦門憑空拍出來的東西,你以為有些事很傻,但是反而是你想得太簡單。更糟糕的是,你一邊到處宣傳這些一邊吸引別人的關注,覺得自己是在傳道,很有滿足感,可事實上你到呼叫這套想當然的東西把多少人給帶歪了?
還有,vb的歸vb,.net的歸.net,java的歸java,c的歸c……很多次見你為了甩代碼而甩代碼,這樣不是合適的討論方式。不然你回頭再翻一翻你的回帖,是不是真正在討論問題,是不是對題主有參考價值。
你要想驗證一下也很簡單,去.net版塊,java版塊,python版塊連續復制粘貼刷三天,看看大家會怎么回復你。

你好,首先感謝回帖。我不是專業碼代碼的,只是有時候做控制需要處理一些資料,因此對大家的觀點不敢妄加評論。但是上述有一些我很贊同,在控制里面,很多時候每秒需要采集、計算和輸出1000+資料,用檔案在軟體之間交換資訊確實不太可能哈,低速的場合或許可以的。
我試了一下,代碼經過簡單的修改可以從VB轉到VB,net,而且可以不報錯除錯打開軟體界面,但是呼叫硬體初始化函式的時候就會出現“記憶體、堆疊、簽名”關鍵詞的報錯。但是因為硬體廠商提供的底層函式用了*.lib,所以想看原函式不太可能。因此作罷。再次感謝你的回答!

uj5u.com熱心網友回復:

參考 12 樓 Runnerchin 的回復:
Quote: 參考 11 樓 zhao4zhong1 的回復:

Quote: 參考 9 樓 qq_35913527 的回復:

Quote: 參考 5 樓 zhao4zhong1 的回復:

不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接呼叫B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本檔案,或修改A、B語言代碼讓其通過文本檔案輸入輸出。
即可很方便地讓A、B兩種語言之間協調作業。
比如:
A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

共享臨時文本檔案這種行程之間的通訊方法相比其它方法的優點有很多,下面僅列出我現在能想到的:
·行程之間松耦合
·行程可在同一臺機器上,也可跨機,跨作業系統,跨硬體平臺,甚至跨國。
·方便除錯和監視,只需讓第三方或人工查看該臨時文本檔案即可。
·方便在線開關服務,只需洗掉或創建該臨時文本檔案即可。
·方便實作分布式和負載均衡。
·方便佇列化提供服務,而且幾乎不可能發生佇列滿的情況(除非硬碟空間滿)
·……

“跨語言、跨機,跨作業系統,跨硬體平臺,跨國,跨*.*的”苦海無邊,
回頭是“使用共享純文本檔案進行資訊交流”的岸!

辛苦了,謝謝哈。思路對我很受用。

例子代碼給你繼續“受用”吧:
//test.c 本程式演示兩個行程之間通過臨時文本檔案交換資料實作間接呼叫
//A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
//B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
//A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
#include <io.h>
#include <stdio.h>
#include <windows.h>
int main(int argc,char **argv) {
    int d,r;
    FILE *f;
    char cmdstr[512];

    if (argc<2) {
        sprintf(cmdstr,"cmd /c \"%s\" B",argv[0]);
        WinExec(cmdstr,SW_HIDE);
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
        return 0;
    }
    if (argv[1][0]=='a'||argv[1][0]=='A') {//A
        for (d=1;d<=5;d++) {//共使用1..5呼叫B 5次
            //A將請求資料寫到檔案a.txt,寫完后改名為aa.txt
            f=fopen("a.txt","w");
            fprintf(f,"%d\n",d);
            fclose(f);
            rename("a.txt","aa.txt");
            printf("call with %d\n",d);
            //A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
            while (1) {
                Sleep(100);
                if (_access("bb.txt",0)!=-1) {
                    f=fopen("bb.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    remove("bb.txt");
                    break;
                }
            }
            printf("result:%d\n",r);
        }
    } else {//B
        while (1) {
            //B發現aa.txt存在時,讀取其內容,呼叫相應功能,將結果寫到檔案b.txt,寫完后洗掉aa.txt,再將b.txt改名為bb.txt
            while (1) {
                Sleep(100);
                if (_access("aa.txt",0)!=-1) {
                    f=fopen("aa.txt","r");
                    fscanf(f,"%d",&r);
                    fclose(f);
                    r=r*10;
                    f=fopen("b.txt","w");
                    fprintf(f,"%d\n",r);
                    fclose(f);
                    remove("aa.txt");
                    rename("b.txt","bb.txt");
                    break;
                }
            }
            if (r==50) break;
        }
    }
    return 0;
}
//C:\tmp\test>test
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>start /B test B
//
//C:\tmp\test>test A
//call with 1
//result:10
//call with 2
//result:20
//call with 3
//result:30
//call with 4
//result:40
//call with 5
//result:50
//
//C:\tmp\test>

老趙真是老師?
索性多聊點吧,如果A發出了5個請求,B處理到第3個,然后A又需要發5個請求怎么辦?你的代碼完全沒有考慮競爭,更不用說操作的原子性。分布式不是你想得那么簡單三兩句代碼就行的。一旦操作頻繁起來,程式之間搶資源要搶到打破頭,解決了鎖的問題,還有一個傳輸效率的問題,你肯定也沒有考慮過,事實上檔案是效率最低的,一旦有高頻的、大體積的資料互動,資源都消耗在IO上,這個問題你肯定也沒有考慮過。一板一眼地給學生做演示的時候,我覺得你寫起代碼肯定是信手拈來,但是老趙,真實的專案里不會這樣做的,你覺得復制粘貼的這些語錄都是你的心得,但是這些只是你拍腦門憑空拍出來的東西,你以為有些事很傻,但是反而是你想得太簡單。更糟糕的是,你一邊到處宣傳這些一邊吸引別人的關注,覺得自己是在傳道,很有滿足感,可事實上你到呼叫這套想當然的東西把多少人給帶歪了?
還有,vb的歸vb,.net的歸.net,java的歸java,c的歸c……很多次見你為了甩代碼而甩代碼,這樣不是合適的討論方式。不然你回頭再翻一翻你的回帖,是不是真正在討論問題,是不是對題主有參考價值。
你要想驗證一下也很簡單,去.net版塊,java版塊,python版塊連續復制粘貼刷三天,看看大家會怎么回復你。

趙4這套狗P理論,看著惡心死了…………還老是自以為是……
用他這種編程回想,不知道造就了多少垃圾代碼!!!

uj5u.com熱心網友回復:

越惡心,越垃圾的代碼,越在實際中被天天使用;
也優雅,越精致的代碼,越在實際中被束之高閣。

請牢記:源代碼本身的書寫是否結構化或面向物件或符合設計模式或敏捷…并不重要,重要的是你是否使用結構化或面向物件或符合設計模式或敏捷…的方法命名識別符號、閱讀、修改、檢查、測驗源代碼。

意思是你程式結構看上去再合理,再簡潔,也不一定比看上去一團亂麻的程式結構在運行或修改時更不易出錯,更方便修改,出錯了更容易找到哪里出錯和具體出錯的原因,更容易改正錯誤。

試對比
圖書館(對圖書的分類夠結構化了吧)

搜索引擎(可看作是扁平化任何結構資料,僅支持全文檢索)
哪個處理資訊更方便、更高效。

所以
與其費勁去重構代碼讓其看上去更簡潔、更合理
不如費勁學習grep、sed、awk、……這類全文搜索和批處理編輯的工具。

結構越復雜,越難修改,越難除錯。
有時(甚至大多數時候),看上去越合理、越簡潔的代碼,運行起來性能越差,出錯時查找原因越難,找到出錯原因后改正越費勁。

程式員要做的不是盡力避免錯誤,而是聚焦在快速發現并改正錯誤。真正以快速方式輕易解決錯誤,“快速的失敗”遠勝過“預防錯誤”。Fred George

前微軟C#編輯器的開發主管Jay Bazuzi列出的一些有助于找到正確方向的問題;他覺得前同事們應該用這些問題來問自己;實際上不管在哪里作業的開發者們都應該經常問問自己這些問題:
◆“要保證這個問題不會再出現,我該怎么做?”
◆“要想少出些Bug,我該怎么做?”
◆“要保證Bug容易被修復,我該怎么做?”
◆“要保持對變化的快速回應,我該怎么做?”
◆“要保證我的軟體的運行速度,我該怎么做?”
如果大多數團隊都能不時問一下自己,必定會從中得益,因為這些都是真正強而有力的問題。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/51383.html

標籤:VB基礎類

上一篇:dim myControls as new Dictionary 顯示用戶型別未定義

下一篇:vba 未發現資料源名稱并且未指定默認驅動程式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more