.■■■ 資料型別摘要 (Visual Basic)
.■■■ VB.NET中指針和非託管內存的應用 ( IntPtr, Marshal 及 GCHandle ) Marshaling Structures
.■■■ 一見鍾情VB.NET指針
.■■■ VB.NET 一些陣列轉換
.■■■ 基礎程式設計(3)-基本資料型態 (一個呆子的網站)
.■■■ HOW TO:使用屬性建立 C/C++ 等位 (C# 和 Visual Basic)
.■■■ 從C#程序中調用非受管DLLs,關於屬性 , [StructLayout(LayoutKind.Sequential)] - .NET技術 / C#
.■■■ System.Runtime.InteropServices.StructLayout 允許的值有StructLayout.Auto StructLayout.Sequential StructLayout.Explicit ; StructLayout特性支持三種附加字段:CharSet、Pack、Size。
· CharSet定義在結構中的字符串成員在結構被傳給DLL時的排列方式。可以是Unicode、Ansi或Auto。默認為Auto,在WIN NT/2000/XP中表示字符串按照Unicode字符串進行排列,在WIN 95/98/Me中則表示按照ANSI字符串進行排列。
· Pack定義了結構的封裝大小。可以是1、2、4、8、16、32、64、128或特殊值0。特殊值0表示當前操作平台默認的壓縮大小。
.■■■ VB.NET和C#一樣, 呼叫SDK提供的功能都是使用 Platform Invocation 技巧, 即DllImport Attribute, 兩者半斤八兩, 無所謂何者較好, 只是C#可以利用 unsafe 標示使用指標, 這一點VB.NET不支援。
.■■■ VB無所不能之一:指標
.■■■ VC++ DLL 的類型
.■■■ - 1. 建構DLL
.■ - 1.1 [ 新增專案 ] -> 選擇 [ 類別庫 ]
.■ - 1.2 撰寫程式碼
Public Class ClsSap01
Function str01(ByVal tStr As String, ByVal tInt As Integer) As String
Return "Begin By IT : " & vbNewLine & tStr & vbNewLine & " The Int is : " & tInt.ToString
End Function
Function int01(ByVal tInt01 As Integer, ByVal tint02 As Integer) As Integer
Return (tInt01 + tint02).ToString
End Function
End Class
.■ - 1.3 建置方案,於 Debug 目錄下取得 dll 檔
.■ - 2. 引用 DLL
.■ - 2.1 開啟新的專案,並且將 1.3 所產生的 DLL 加入參考
.■ - 2.2 Windows Form frmDLLcallTest 程式碼 :
Imports ClsItSap01
Public Class frmDLLcallTest
Private Sub btnCall01_Click(sender As System.Object, e As System.EventArgs) Handles btnCall01.Click
Dim mDll As New ClsItSap01.ClsSap01
txtMsg.Text = mDll.str01("dll call test ", 300)
txtMsg.Text &= vbNewLine & mDll.int01(40, 532)
End Sub
End Class
.■ -
.■ -Structure的東西是ByVal的,而Class是ByRef的!
用C的語言來說,就是Structure是copymem的,Class是改指針的。
class 可以當作 C 裡面的指針用。
.■■■ - [VB.NET] 動態使用DLL
.■■■ - 如果是 Win32API 的 DLL , 要用 DllImport , Win32API 就是 Windows 系統內建的一些功能 ( ? )
.■■■ - 我用VC++寫了一個DLL檔要讓VB呼叫, 在VC++的compile都過了,但是在VB.net要加入參考的地方一直出現"這不是有效的組間或COM元件。.........請確定這是一個可存取的檔案。"
這個錯誤訊息,不知道哪理出問題了?
要把DLL包成COM,或是將原來的程式以C++.NET改寫編譯,應該就可以在[加入參考]-[專案]裡可以參考到
.■■■ - 使用vs2005呼叫 delphi所寫的 dll檔會出現如下錯誤, "無法加入c:\windows\xxx.dll的參考,請確定這是一個可存取的檔案,而且是一個有效的組件或COM元件", 有其他辦法可以讓.net使用 delphi的dll檔嗎?
.■■■ - VB.NET特性----Dllimport特性
.■■■ - VB.NET編程中調用WindowsAPI
.■■■ - 呼叫外部DLL或API的宣告
.■■■ -
.■■■ - (VC++ 6 ) This series of articles discusses four common situations when working with DLLs:
Part 1 | Calling a DLL C++ function from a VC++ application |
Calling a DLL C++ class from a VC++ application | |
Part 2 | Calling a DLL C++ function from a VB application |
Part 3 | Calling a DLL C++ class from a VB application |
Part 4 | Loading a C++ DLL dynamically from a VC++ application |
.■■■ - 逐步解說:呼叫 Windows API (Visual Basic)
.■■■ - DllImport的用法...等綜合問題集
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
MS C/C++
|
MS C# ( VB.Net )
|
HANDLE, LPDWORD, LPVOID, void* | IntPtr |
LPCTSTR, LPCTSTR, LPSTR, char*,const char*, Wchar_t*, LPWSTR | String [in], StringBuilder [in, out] |
DWORD, unsigned long, Ulong | UInt32, [MarshalAs(UnmanagedType.U4)] |
bool | bool |
LP | [In] ref |
SIZE_T | uint |
LPDWORD | out uint |
LPTSTR | [Out] StringBuilder |
PULARGE_INTEGER | out ulong |
WORD | uInt16 |
Byte, unsigned char | byte |
Short | Int16 |
Long, int | Int32 |
float | single |
double | double |
NULL pointer | IntPtr.Zero |
Uint | UInt32 |
.■■■ -
Windows Data Type | .NET Data Type | C# Data Type | VB.Net Data Type |
BOOL, BOOLEAN | Boolean or Int32 | bool or int | Boolean or Integer |
BSTR | String | string | String |
BYTE | Byte | byte | Byte |
CHAR | Char | char | Char |
DOUBLE | Double | double | Double |
DWORD | Int32 or UInt32 | int | Integer |
FLOAT | Single | float | Single |
HANDLE (and all other handle types, such as HFONT and HMENU) | IntPtr, UintPtr or HandleRef | IntPtr, UintPtr or HandleRef | IntPtr, UintPtr or HandleRef |
HRESULT | Int32 or UInt32 | int or uint | Integer or UInteger |
INT | Int32 | int | Integer |
LANGID | Int16 or UInt16 | short | Short |
LCID | Int32 or UInt32 | int or uint | Integer or UInteger |
LONG | Int64 | long | Long |
LPARAM | IntPtr, UintPtr or Object | IntPtr, UintPtr or Object | IntPtr, UintPtr or Object |
LPCSTR | String | string | String |
LPCTSTR | String | string | String |
LPCWSTR | String | string | String |
LPSTR | String or StringBuilder* | string or StringBuilder | String or StringBuilder |
LPTSTR | String or StringBuilder | string or StringBuilder | String or StringBuilder |
LPWSTR | String or StringBuilder | string or StringBuilder | String or StringBuilder |
LPVOID | IntPtr, UintPtr or Object | IntPtr, UIntPtr or object | IntPtr, UIntPtr or Object |
LRESULT | IntPtr | IntPtr | IntPtr |
SAFEARRAY | .NET array type | .NET array type | .NET array type |
SHORT | Int16 | short | Short |
TCHAR | Char | char | Char |
UCHAR | Byte | byte | Byte |
UINT | UInt32 | uint | UInteger |
ULONG | ULong | ulong | ULong |
VARIANT | Object | object | Object |
VARIANT_BOOL | Boolean | bool | Boolean |
WCHAR | Char | char | Char |
WORD | Int16 or UInt16 | short | Short |
WPARAM | IntPtr, UintPtr or Object | IntPtr, UintPtr or Object | IntPtr, UintPtr or Object |
.■■■ -
-
-
0 意見:
張貼留言