主頁 > 軟體工程 > 這個DLL該如何呼叫?求大俠。。。指點123。。。。

這個DLL該如何呼叫?求大俠。。。指點123。。。。

2020-09-17 11:55:44 軟體工程

介面以動態庫Dll形式提供,動態庫名稱為CreDLL.dll。
一. 演算法介面說明
1 介面說明
bool get_cre_str(unsigned char * buffer, unsigned char *pstr);
功能描述: 通過輸入引數計算加密資料
(1)輸入引數:buffer,資料型別為無符號字符指標,資料內容為20位數字字符;
(2)輸出引數:pstr,資料型別為無符號字符指標,回傳處理后的35位可見字串;
 (3)回傳值:bool型回傳值,如果輸入引數校驗失敗則回傳false,否則為成功。


在VB6.0中如何這個呼叫DLL。,試N次了,總是提示溢位什么的。應該是我資料型別弄不對。
DLL應該是VC寫的。

uj5u.com熱心網友回復:

關鍵是你的API宣告如何寫的啊。

uj5u.com熱心網友回復:

樓主試試這樣使用:
Option Explicit

Private Declare Function get_cre_str Lib "CreDLL.dll" (pBuffer As Byte, pStr As Byte) As Integer
' 如果除錯運行提示“找不到DLL檔案”,你把CreDLL.dll加上完整路徑試試。
' 編譯 exe時要把路徑去掉,只留  "CreDLL.dll"

Private Sub Command1_Click()
   Dim arrIN() As Byte
   Dim arrOut() As Byte

   ReDim arrOut(39&)
   arrIN = StrConv("123456789", vbFromUnicode)
   If (0 = get_cre_str(arrIN(0), arrOut(0))) Then
      MsgBox "呼叫處理失敗。", 64
   Else
      MsgBox "處理結果:" & Left$(StrConv(arrOut, vbUnicode), 35), 64
   End If
End Sub

uj5u.com熱心網友回復:

可以把DLL當成資源檔案傳上來試下,

uj5u.com熱心網友回復:

如果不是 __stdcall 呼叫約定,VB 就不能直接呼叫。

uj5u.com熱心網友回復:

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

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

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

uj5u.com熱心網友回復:

參考 4 樓 of123 的回復:
如果不是 __stdcall 呼叫約定,VB 就不能直接呼叫。

這種問題,IDE好像就直接提示“呼叫約定錯誤”吧(記得有這樣的提示),
  樓主說的是什么“溢位”錯誤呢。

uj5u.com熱心網友回復:

 趙四牌復讀機又來了…………

難道在VB6中呼叫其它語言寫的DLL也有錯???

uj5u.com熱心網友回復:

https://pan.baidu.com/s/1bpkjoeF
又折騰一圈,dll檔案上傳了,,,

uj5u.com熱心網友回復:

前面,頂樓的說明里,,有錯誤,這個才是對的。
介面說明
bool get_ewm_str(unsigned char * buffer, unsigned char *pstr);

uj5u.com熱心網友回復:

試試:
Private Declare Function get_ewm_str Lib "CreDLL.dll" (Byref buffer As Byte, Byref pstr As Byte) As Byte

uj5u.com熱心網友回復:

參考 9 樓 alwsse 的回復:
前面,頂樓的說明里,,有錯誤,這個才是對的。
介面說明
bool get_ewm_str(unsigned char * buffer, unsigned char *pstr);

這只是函式名不同嘛,引數是一樣的。
我在2樓的代碼,你把函式名改正確不就行了?

uj5u.com熱心網友回復:

樓主,你這個dll的匯出函式,不是 __stdcall 呼叫約定 的好不!


這種dll ,在VB6中不能直接使用的。

uj5u.com熱心網友回復:

呼叫約定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx

uj5u.com熱心網友回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

uj5u.com熱心網友回復:

參考 14 樓 of123 的回復:
VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!

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,改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后洗掉bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷檔案是否存在、檔案讀寫和檔案更名。
但是誰又能舉出不支持判斷檔案是否存在、檔案讀寫和檔案更名的開發語言或開發環境呢?
可以將臨時檔案放在RamDisk上提高效率減少磨損磁盤。
資料的結構很復雜的話,文本檔案的格式問題可參考json或xml

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

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

好多時候,是廠家規定了情況,你按他的要求去處理,是被限定的,沒辦法,總得生活嘛,好在有解決方案

樓主看來不是真正的VB老人,要分清VB6和.NET再發貼

uj5u.com熱心網友回復:

將A替換為VB6,B替換為呼叫你這個DLL的VC

uj5u.com熱心網友回復:

參考 15 樓 Chen8013 的回復:
Quote: 參考 14 樓 of123 的回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!
是 VB6,微軟網站提供的例子。只不過子類這種手段我們很少用。

uj5u.com熱心網友回復:

參考 18 樓 of123 的回復:
Quote: 參考 15 樓 Chen8013 的回復:

Quote: 參考 14 樓 of123 的回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!
是 VB6,微軟網站提供的例子。只不過子類這種手段我們很少用。

你看看它的陳述句、語法,怎么可能是VB6! 
現在MSDN網站上,它的“VB”或Visual Basic,都是指的VB.NET了吧!
如果是VB6,它應該會明確的指明是Visual Basic 6.0 。

uj5u.com熱心網友回復:

參考 17 樓 zhao4zhong1 的回復:
將A替換為VB6,B替換為呼叫你這個DLL的VC

將A替換為VB.NET,B替換為呼叫你這個DLL的VC

uj5u.com熱心網友回復:

參考 20 樓 zhao4zhong1 的回復:
Quote: 參考 17 樓 zhao4zhong1 的回復:

將A替換為VB6,B替換為呼叫你這個DLL的VC

將A替換為VB.NET,B替換為呼叫你這個DLL的VC


uj5u.com熱心網友回復:

參考 19 樓 Chen8013 的回復:
Quote: 參考 18 樓 of123 的回復:

Quote: 參考 15 樓 Chen8013 的回復:

Quote: 參考 14 樓 of123 的回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!
是 VB6,微軟網站提供的例子。只不過子類這種手段我們很少用。

你看看它的陳述句、語法,怎么可能是VB6! 
現在MSDN網站上,它的“VB”或Visual Basic,都是指的VB.NET了吧!
如果是VB6,它應該會明確的指明是Visual Basic 6.0 。
很久以前的了,我下載保存的檔案已經是 2007 年。明確說明是 VB6。我也覺得陳述句很生澀,不能排除子類的實作有特定語法。

uj5u.com熱心網友回復:

參考 22 樓 of123 的回復:
Quote: 參考 19 樓 Chen8013 的回復:

Quote: 參考 18 樓 of123 的回復:

Quote: 參考 15 樓 Chen8013 的回復:

Quote: 參考 14 樓 of123 的回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!
是 VB6,微軟網站提供的例子。只不過子類這種手段我們很少用。

你看看它的陳述句、語法,怎么可能是VB6! 
現在MSDN網站上,它的“VB”或Visual Basic,都是指的VB.NET了吧!
如果是VB6,它應該會明確的指明是Visual Basic 6.0 。
很久以前的了,我下載保存的檔案已經是 2007 年。明確說明是 VB6。我也覺得陳述句很生澀,不能排除子類的實作有特定語法。

“子類化”也不可能改變語法吧!
微軟網站提供“例子”,教你“實作一些原本不支持的東西”完全是不可能的事情。
太陽真的會從西邊出來?

uj5u.com熱心網友回復:

參考 22 樓 of123 的回復:
Quote: 參考 19 樓 Chen8013 的回復:

Quote: 參考 18 樓 of123 的回復:

Quote: 參考 15 樓 Chen8013 的回復:

Quote: 參考 14 樓 of123 的回復:

VB 不能以常規方式呼叫 CDECL 約定函式,但可以用子類方式訪問。下面是一個例子:
Imports System
Imports Microsoft.VisualBasic
Imports System.Runtime.InteropServices
Public Class LibWrap
' Visual Basic does not support varargs, so all arguments must be 
' explicitly defined. CallingConvention.Cdecl must be used since the stack 
' is cleaned up by the caller. 
' int printf( const char *format [, argument]... )
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, d As Double) As Integer
End Function
<DllImport("msvcrt.dll", CallingConvention := CallingConvention.Cdecl)> _
Overloads Shared Function printf ( _
    format As String, i As Integer, s As String) As Integer
End Function
End Class 'LibWrap

Public Class App
    Public Shared Sub Main()
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %f", 99, 
                       99.99)
        LibWrap.printf(ControlChars.CrLf + "Print params: %i %s", 99, _
                       "abcd")
    End Sub 'Main
End Class 'App

不過,要我來做,我會再寫一個 VC++ DLL,用__stdcall 函式將原來的函式封一層。

你這是VB.NET,不是VB6吧!
是 VB6,微軟網站提供的例子。只不過子類這種手段我們很少用。

你看看它的陳述句、語法,怎么可能是VB6! 
現在MSDN網站上,它的“VB”或Visual Basic,都是指的VB.NET了吧!
如果是VB6,它應該會明確的指明是Visual Basic 6.0 。
很久以前的了,我下載保存的檔案已經是 2007 年。明確說明是 VB6。我也覺得陳述句很生澀,不能排除子類的實作有特定語法。

你說的這段代碼,我已經在MSDN網站上找到它了。
不出我所料,這個是VB.NET的,不是VB6 !
這兒只說了是“Visual Basic”。我在19樓已經說過了,“Visual Basic”是指的是VB.NET。
只有它說了是“Visual Basic 6.0”的地方,才是VB6的。 

uj5u.com熱心網友回復:

參考 7 樓 Chen8013 的回復:
 趙四牌復讀機又來了…………

難道在VB6中呼叫其它語言寫的DLL也有錯???

那你不妨試試在VB6中呼叫64位的DLL。

uj5u.com熱心網友回復:

參考 25 樓 zhao4zhong1 的回復:
Quote: 參考 7 樓 Chen8013 的回復:

 趙四牌復讀機又來了…………

難道在VB6中呼叫其它語言寫的DLL也有錯???

那你不妨試試在VB6中呼叫64位的DLL。

強詞奪理!!!

樓主的那個是Win32平臺的DLL好不! 只是呼叫約定不是StdCall的罷了。


我現在是搞不定在VB6中呼叫64位DLL,但也許有某些“絕世高人”能搞定呢……

uj5u.com熱心網友回復:

參考 26 樓 Chen8013 的回復:
Quote: 參考 25 樓 zhao4zhong1 的回復:

Quote: 參考 7 樓 Chen8013 的回復:

 趙四牌復讀機又來了…………

難道在VB6中呼叫其它語言寫的DLL也有錯???

那你不妨試試在VB6中呼叫64位的DLL。

強詞奪理!!!

樓主的那個是Win32平臺的DLL好不! 只是呼叫約定不是StdCall的罷了。


我現在是搞不定在VB6中呼叫64位DLL,但也許有某些“絕世高人”能搞定呢……

反正用我的辦法能解決的都不叫“搞定”。

uj5u.com熱心網友回復:

參考 27 樓 zhao4zhong1 的回復:
Quote: 參考 26 樓 Chen8013 的回復:

Quote: 參考 25 樓 zhao4zhong1 的回復:

Quote: 參考 7 樓 Chen8013 的回復:

 趙四牌復讀機又來了…………

難道在VB6中呼叫其它語言寫的DLL也有錯???

那你不妨試試在VB6中呼叫64位的DLL。

強詞奪理!!!

樓主的那個是Win32平臺的DLL好不! 只是呼叫約定不是StdCall的罷了。


我現在是搞不定在VB6中呼叫64位DLL,但也許有某些“絕世高人”能搞定呢……

反正用我的辦法能解決的都不叫“搞定”。

你那能算?
問題是有多少人愿意用你那樣的處理模式?有多少人認同你的那種方法?

你先呼吁全世界的程式員,廢除現有的 gif、bmp、jpg、png、mp3、mp4、avi、mkv、wma、
pdf、ceb、cab、zip、rar、7z、iso、gho、doc/docx、xls/xlsx、ppt/pptx、wps、et、wpp …………
等等的各種格式的檔案,全部統一用“純文本檔案”模式吧!!!!

如果做不到,就不要老是在我們面前A語言、B語言文本檔案資料交換的瞎BB!!!

uj5u.com熱心網友回復:

理想很豐滿;
現實很骨感。

uj5u.com熱心網友回復:

呼吁全世界的人,廢除現有的中文、英文、法文、德文、阿拉伯文、 …………
等等的各種語言,全部統一用“世界語”吧!!!!

uj5u.com熱心網友回復:

vc6 寫標準的 DLL  呼叫 CreDLL.dll.
vb6   呼叫 標準的 DLL.

uj5u.com熱心網友回復:

看來樓主失蹤了。  

正好這幾天在研究破解一個加密演算法,那個 .NET的程式(估計是用C#開發的)呼叫了它綁在資源中的一個dll。
那個dll的匯出函式也是 CDelCall的………… 
必須要先測驗那個dll函式的輸出結果,因此這幾天查了不少資料,封裝了一個模塊實作CDel函式的呼叫。

不知道對樓主的這個DLL函式呼叫,運行結果正確不: 


我封裝的呼叫介面,是按函式回傳值為Long來處理的(我目前還做不到“完美兼容任意型別”)。
樓主說這個dll的函式回傳值為bool型,因此lRet的值中就“多取了一些資料”,那么如果把 lRet 再處理一下:
lRet = 1 and lRet (或者 lRet = 255 and lRet ,也就是取最低位元組的值)
結果應該就是“完全相符”的了(因為C/C++ 的布爾型,用0表示false ,1表示 true)

uj5u.com熱心網友回復:

剛才修改測驗代碼,然后又試了很多次,發現“輸入”并不是要“20個數字字符”,
其實是“任意20位元組的字符”都行(包括漢字都行,但null字符除外,因為它是表示字串結束的)。

另外,開始的代碼,偶爾會“執行失敗”,后來想到應該就是沒有加 null字符的原因,
把“輸入字串”改成: arrIN = StrConv(s & vbNullChar, vbFromUnicode)
運行多次測驗,再也沒有“失敗”(指get_ewm_str()執行失敗。這兒的 s 就是隨機組合的“共20位元組的字串”)。

“輸出結果”最后的4個字符(16進制的字符碼),估計是某種演算法的 CRC16值。

uj5u.com熱心網友回復:

VC的函式不能直接VB6  除非,顯示宣告_stdcall  ,VC的是cdecl方式,兩者不同是VC引數從右邊向左邊壓堆疊,VB是從左向右壓堆疊。

VC這種方式好處是,引數是可變的,就象printf這種函式一樣,引數可變,而VB是不可變的。VC這種方式導致被呼叫函式不能自己平衡堆疊,因為引數可變。只能是呼叫方來平衡堆疊。所以VB直接呼叫VC沒有顯式_stdcall的方式函式,會出現堆疊不平衡,溢位的現象,導致程式崩潰。

uj5u.com熱心網友回復:

將A替換為VB6,B替換為呼叫你這個64位DLL的64位VC

uj5u.com熱心網友回復:

這種問題反復討論過多次了。
最安全好用的方式是用VC做一個中間DLL,封裝成 __stdcall 介面。

uj5u.com熱心網友回復:

參考 36 樓 Tiger_Zhao 的回復:
這種問題反復討論過多次了。
最安全好用的方式是用VC做一個中間DLL,封裝成 __stdcall 介面。

你這種方法,每遇到一個“新的”(無論是dll,還是新增加API函式),都要進行重新“封裝”,不方便使用吧!


如果要“封裝”,并不一定要通過“第三方語言做中間dll”,
  通過tlb的宣告來呼叫CDel的API函式、再用RtlConvertUlongToLargeInteger來“平衡堆疊”也行。
這個RtlConvertUlongToLargeInteger也是用tlb來宣告,宣告成“無入口引數”的函式Pop4,
  呼叫CDel的API傳入了幾個引數,就在它后面緊接著呼叫幾次“處理過的”Pop4 。

uj5u.com熱心網友回復:

非封裝方式考慮過代碼除錯沒?
VB6偏偏有逆天的除錯中改代碼功能,非安全的呼叫方式引起VB-IDE整個崩潰,代碼沒保存!

uj5u.com熱心網友回復:

參考 36 樓 Tiger_Zhao 的回復:
這種問題反復討論過多次了。
最安全好用的方式是用VC做一個中間DLL,封裝成 __stdcall 介面。
我通常也是采用這種作法。

uj5u.com熱心網友回復:

1. 我的那個模塊是可以在IDE下正常運行的;
2. 如果你呼叫的API不會造成“崩潰”,那么通過我的那個模塊呼叫CDel的API也不會造成崩潰。
  其實“崩潰”是傳入一些不合法的引數,而被呼叫的API里沒有“例外處理”造成的。
  就算是 __stdcall 的API,同樣會造成崩潰。
  典型的就是Copymemory() ,如果你傳入的地址或“資料長度”會造成它“非法訪問”,也會直接造成IDE崩掉!
3. 我那個模塊是用于呼叫 CDel約定的,其實被呼叫的API是StdCall的,也能正常執行。

uj5u.com熱心網友回復:

你可以試試在 RtlConvertUlongToLargeInteger 上下中斷,然后直接 End 除錯。
除錯時運行狀態控制不可能完美,什么狀況都可能發生。

uj5u.com熱心網友回復:

參考 41 樓 Tiger_Zhao 的回復:
你可以試試在 RtlConvertUlongToLargeInteger 上下中斷,然后直接 End 除錯。
除錯時運行狀態控制不可能完美,什么狀況都可能發生。

我那個模塊,呼叫CDecl的API函式,在代碼中你能“中斷”的地方都可以去中斷、停止運行,
不會因我的“封裝代碼”造成崩潰、或引起其它例外。


如果因子類化或用到HOOK的緣故,“在任意處中斷后、‘停止’執行”造成IDE崩潰,
這個鍋我可不背…………  


另外,剛才反復試驗了幾次,發覺其實呼叫樓主的這個CDecl的API,不用“特殊處理”都行。

你們可以試一下,新建一個“標準EXE工程”,Form1內畫一個按鈕,然后貼上后面這段代碼。
分別試試IDE下運行、編譯后運行。
樓主在 8樓貼了DLL的下載地址。 下載檔案后,把DLL的檔案名改一下。
Option Explicit

' 這個 API是 CDecl呼叫約定的,IDE下會報運行錯;
' 但在編譯成exe(本機代碼)執行完全正常。
'
Private Declare Function get_ewm_str Lib "KeyCreatDLL.dll" ( _
                        lpInBuffer As Byte, lpOutBuff As Byte) As Byte

Private Sub TestCDeclCall()
   Const TEXT_TAB = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
   Dim arrIn() As Byte
   Dim arrOut() As Byte
   Dim strTemp As String
   Dim i As Integer

   strTemp = ""
   Call Randomize
   For i = 1 To 20            ' 隨機選取 20個字符
      strTemp = strTemp & Mid$(TEXT_TAB, 1& + CLng(35& * Rnd()), 1&)
   Next
   ' 準備“輸入資料”
   arrIn = StrConv(strTemp & vbNullChar, vbFromUnicode)
   ' 準備“輸出緩沖區”
   ReDim arrOut(35&)
   Me.Cls
   Me.Print "測驗字串: " & strTemp      ' 隨機組合的輸入測驗串
   ' 在IDE下運行,下面這句會報運行錯誤: “DLL 呼叫約定錯誤”
   ' 在訊息框中點“除錯”,然后把執行游標拖到“輸出結果”那兒繼續執行就行。
   i = get_ewm_str(arrIn(0&), arrOut(0&))
   ' 在IDE下運行,這兒的i沒有得到回傳值。但編譯后可以正確得到回傳值。
   If (0 = i) Then
      Me.Print "函式執行失敗。"
   Else
      Me.Print "函式回傳值: " & i
' ***** 在IDE下運行,前面API呼叫報錯后,從下面這句繼續執行
      Me.Print "處理后結果: " & StrConv(arrOut, vbUnicode)
   End If
End Sub

Private Sub Command1_Click()
   Call TestCDeclCall
End Sub

uj5u.com熱心網友回復:

最近在研究一個“某檔案”的解密演算法,發現了我那個“CDecl呼叫介面”的新用途!
就是: 呼叫DLL內的“非匯出函式”…………


就是在“DLL函式內呼叫的其它‘內層函式’ ”。
把dll反匯編,找到那些函式的入口地址,
  加載dll模塊后,直接按“函式入口地址”及相關入口引數進行呼叫就行了。


不過很有可能“指令地址”在加載后跟反匯編看到的地址不一樣。
但這一沒關系:加載dll后,可以獲取到其中任意一個匯出函式的地址;
  反匯編后,可以按任一“匯出函式”的入口地址為基準,
   計算“內部函式”的入口地址跟“基準匯出函式”入口地址的“相對偏移值”;
  加載dll后,先獲取“基準匯出函式”的地址,再加上先前計算出來的“偏移值”,
   就是需要呼叫的那個“內部函式”的實際地址了。

uj5u.com熱心網友回復:

計算機組成原理→DOS命令→匯編語言→C語言(不包括C++)、代碼書寫規范→資料結構、編譯原理、作業系統→計算機網路、資料庫原理、正則運算式→其它語言(包括C++)、架構……

uj5u.com熱心網友回復:

回復5樓,你簡直就是胡說八道。dll本來就是用來在不同語言間共用的

uj5u.com熱心網友回復:

參考 45 樓 lshhjxlj 的回復:
回復5樓,你簡直就是胡說八道。dll本來就是用來在不同語言間共用的

不能用dll的開發語言都有哪些不用我舉例說明了吧。
勞煩你舉例說明都有哪些不能讀寫改名純文本檔案的開發語言。
我敢確定,前者比后者多至少一個數量級。

uj5u.com熱心網友回復:

不能用上面某層的代碼呼叫,那樣可能一兩次呼叫沒事,多了就該錯了,原因是堆疊的不平衡
這個問題我也考慮過這樣解決,把這個api放在vb的模塊內包裝一下,在vb的模塊內寫個函式直接呼叫api,不要寫多余的代碼
程式其他地方要用到這個api,就call這個函式,這樣比較好的情況下,在模塊函式退出時他會自動平衡堆疊堆,但這也不是一定的,因為api內部如果把ebp用的亂七八糟,他自己又不恢復,還是會掛

其實有個代碼就在vb內部解決會相對簡單點,寫個內嵌匯編代碼,呼叫這個api,還可以做到完美封裝

uj5u.com熱心網友回復:

參考 47 樓 PctGL 的回復:
不能用上面某層的代碼呼叫,那樣可能一兩次呼叫沒事,多了就該錯了,原因是堆疊的不平衡
. . . . . . . . . . .

不就是說我42樓的代碼嗎,直說好了。

堆疊不平衡確實存在“安全隱患”,并且在IDE下運行時總會彈出“錯誤訊息”,
  偶爾呼叫一次的還好,可以點“除錯”,再從下一行繼續執行也可以;
  不過遇到“頻繁呼叫”的情況,就很累人了;
  還有就是“有回傳值、需要按回傳值再進行處理”的情況,就有點麻煩了(回傳成功/失敗的除外)。

我那個CDecl模塊就是用“內嵌匯編”的方式處理的,對“堆疊平衡”進行了處理,
在IDE下運行不會出現“呼叫約定錯誤”的訊息,并且CDecl和StdCall的API都能通過它呼叫,
  如果“多傳了引數”(引數肯定不能少傳),也不會引起問題。
  比如我在32樓的那個代碼,引數個數本來是2個,我把引數個數那兒寫3或4,不會引起任何問題。
  如果“引數表陣列”Param() 足夠大,比如有100個元素,
     我傳引數個數為100,只要Param(0)和Param(1)是正確的,就不會出任何問題。

uj5u.com熱心網友回復:

我特別喜歡閑來無事站在岸邊欣賞在
堆疊平衡、8/16/32/64/128位CPU、老舊系統/新系統、DOS/vxWork/Linux/Unix/Windows/...、小端/大端、漢語/英語/俄語/德語/阿拉伯語/日語/韓語/西班牙語/...、……、…………
無邊苦海中掙扎的小可憐們。

uj5u.com熱心網友回復:

呼叫約定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx

uj5u.com熱心網友回復:

我也無比敬仰的看著樓上這位,用vb操作bat批處理檔案解決編程問題的方案,估計也是古今第一了

uj5u.com熱心網友回復:

“文本檔案資料交換”就是趙4解決各種問題的“萬能靈藥” !!!

uj5u.com熱心網友回復:

參考 52 樓 Chen8013 的回復:
“文本檔案資料交換”就是趙4解決各種問題的“萬能靈藥” !!!

謬贊了!

當面用聲帶發出的各種聲音以及語言+身體動作+表情

不當面用口信|繩結|帶刻痕的木棍|帶劃痕的石片|樹皮|羊皮紙|竹簡|小紙條|公文
就是大自然解決各種人類之間溝通問題的“萬能靈藥” !!!

uj5u.com熱心網友回復:

打電話、QQ和微信不算,因為會沒信號|沒電|被盜號|偽造|過后死無對證|……

uj5u.com熱心網友回復:

參考 51 樓 PctGL 的回復:
我也無比敬仰的看著樓上這位,用vb操作bat批處理檔案解決編程問題的方案,估計也是古今第一了

我還想用vb6操作肉雞們發動對互聯網的攻擊呢!

uj5u.com熱心網友回復:

參考 53 樓 zhao4zhong1 的回復:
Quote: 參考 52 樓 Chen8013 的回復:

“文本檔案資料交換”就是趙4解決各種問題的“萬能靈藥” !!!

謬贊了!

當面用聲帶發出的各種聲音以及語言+身體動作+表情

不當面用口信|繩結|帶刻痕的木棍|帶劃痕的石片|樹皮|羊皮紙|竹簡|小紙條|公文
就是大自然解決各種人類之間溝通問題的“萬能靈藥” !!!



我看到“打電話”時手舞足蹈、指手劃腳的也大有人在呢………………

uj5u.com熱心網友回復:

參考 56 樓 Chen8013 的回復:
Quote: 參考 53 樓 zhao4zhong1 的回復:

Quote: 參考 52 樓 Chen8013 的回復:

“文本檔案資料交換”就是趙4解決各種問題的“萬能靈藥” !!!

謬贊了!

當面用聲帶發出的各種聲音以及語言+身體動作+表情

不當面用口信|繩結|帶刻痕的木棍|帶劃痕的石片|樹皮|羊皮紙|竹簡|小紙條|公文
就是大自然解決各種人類之間溝通問題的“萬能靈藥” !!!



我看到“打電話”時手舞足蹈、指手劃腳的也大有人在呢………………

沒準人家用的是高富帥炫富專用衛星視頻360°環繞AR+VR電話也說不定。

uj5u.com熱心網友回復:

重點是:第二個引數(輸出引數)應該由 VB6 分配好記憶體。示例代碼如下:

VB6 宣告代碼:
Declare Function get_cre_str Lib "CreDLL.dll" (ByVal buffer As String, ByVal pstr As String) As Byte

VB6 呼叫代碼:
  Dim buffer As String
  Dim pstr As String
  buffer = "123"
  pstr = Space$(64)   '在 VB6 里給 get_cre_str 的第二個引數(輸出引數)分配記憶體
  Dim bOK As Byte
  bOK = get_cre_str(buffer, pstr)
  'pstr 里查找 \0,并舍棄其后的字符
  Dim n As Integer
  n = InStr(1, pstr, Chr$(0))
  If n >= 1 Then
    pstr = Left$(pstr, n - 1)
  End If

uj5u.com熱心網友回復:

參考 58 樓 Hanford 的回復:
重點是:第二個引數(輸出引數)應該由 VB6 分配好記憶體。示例代碼如下:

VB6 宣告代碼:
Declare Function get_cre_str Lib "CreDLL.dll" (ByVal buffer As String, ByVal pstr As String) As Byte

VB6 呼叫代碼:
  Dim buffer As String
  Dim pstr As String
  buffer = "123"
  pstr = Space$(64)   '在 VB6 里給 get_cre_str 的第二個引數(輸出引數)分配記憶體
  Dim bOK As Byte
  bOK = get_cre_str(buffer, pstr)
  'pstr 里查找 \0,并舍棄其后的字符
  Dim n As Integer
  n = InStr(1, pstr, Chr$(0))
  If n >= 1 Then
    pstr = Left$(pstr, n - 1)
  End If

這個根本不是“重點”好不!


你看看我在12樓的回復。
我在2樓給樓主回復的示例代碼,那也是“在VB6中分配好輸出記憶體”的了。

并且,他的這個API的“輸出字串”是ANSI格式的編碼。
在你的這段代碼中,你用:
pstr = Left$(pstr, n - 1)
根本不能把“NULL”字符去除干凈!

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

標籤:VB基礎類

上一篇:求助tableadapter問題

下一篇:iprofessionalLibrary.ocx是什么控制元件?VB打開提醒不能加載iprofessionalLibrary.ocx

標籤雲
其他(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