Archive for 3月, 2013
-
Hello, Win32 API(JScript.NET) World!
Posted on 3月 7th, 2013 by cx20
Win32 API(JScript.NET)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は JScript.NET による Win32 API 呼出しの例となっている。ソースコード
import System; import System.Reflection; import System.Reflection.Emit; import System.Runtime; import System.Text; // Invoke a Win32 P/Invoke call. // http://www.leeholmes.com/blog/2006/07/21/get-the-owner-of-a-process-in-powershell-%e2%80%93-pinvoke-and-refout-parameters function InvokeWin32(dllName:String, returnType:Type, methodName:String, parameterTypes:Type[], parameters:Object[]) { // Begin to build the dynamic assembly var domain = AppDomain.CurrentDomain; var name = new System.Reflection.AssemblyName('PInvokeAssembly'); var assembly = domain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run); var module = assembly.DefineDynamicModule('PInvokeModule'); var type = module.DefineType('PInvokeType',TypeAttributes.Public + TypeAttributes.BeforeFieldInit); // Define the actual P/Invoke method var method = type.DefineMethod(methodName, MethodAttributes.Public + MethodAttributes.HideBySig + MethodAttributes.Static + MethodAttributes.PinvokeImpl, returnType, parameterTypes); // Apply the P/Invoke constructor var ctor = System.Runtime.InteropServices.DllImportAttribute.GetConstructor([Type.GetType("System.String")]); var attr = new System.Reflection.Emit.CustomAttributeBuilder(ctor, [dllName]); method.SetCustomAttribute(attr); // Create the temporary type, and invoke the method. var realType = type.CreateType(); return realType.InvokeMember(methodName, BindingFlags.Public + BindingFlags.Static + BindingFlags.InvokeMethod, null, null, parameters); } function MessageBox(hWnd:Int32, lpText:String, lpCaption:String, uType:Int32) { var parameterTypes:Type[] = [Type.GetType("System.Int32"),Type.GetType("System.String"),Type.GetType("System.String"),Type.GetType("System.Int32")]; var parameters:Object[] = [hWnd, lpText, lpCaption, uType]; return InvokeWin32("user32.dll", Type.GetType("System.Int32"), "MessageBoxA", parameterTypes, parameters ); } MessageBox( 0, "Hello, Win32 API World!", "Hello, World!", 0 );
コンパイル方法
C:¥> jsc Hello.js
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API World! --------------------------- OK ---------------------------
-
Hello, oo4o(VB6) World!
Posted on 3月 5th, 2013 by cx20
oo4o
oo4o(Oracle Objects for OLE)は、COM ベースの Oracle Database 接続用 API である。
Windows 環境で VB による開発に用いられることが多い。ソースコード(VB6 + oo4o + Oracle)
Option Explicit Sub Main() Dim ses Dim db Dim rs Set ses = CreateObject("OracleInProcServer.XOraSession") Set db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 ) Set rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4) While NOT rs.EOF Debug.Print rs(0).Name Debug.Print "------------------" Debug.Print rs(0).Value rs.MoveNext Wend End Sub
コンパイル方法
C:¥> vb6 /make hello.vbp
実行結果
MESSAGE ------------------ Hello, oo4o World!
-
Hello, ADO(VB6) World!
Posted on 3月 4th, 2013 by cx20
ADO(VB6)
ADO(ActiveX Data Objects)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
OLE DB プロバイダを介することで様々な DBMS への接続が可能となっている。
OLE DB プロバイダとしては、以下のようなプロバイダがある。いくつかが OS 標準で付属している他、追加インストールが可能である。プロバイダ名 表示名 説明 MSDASQL Microsoft OLE DB Provider for ODBC ODBC データベース Microsoft.Jet.OLEDB.4.0 Microsoft OLE DB Provider for Microsoft Jet Microsoft Jet データベース Microsoft.ACE.OLEDB.12.0 Microsoft Office 12.0 Access Database Engine OLE DB Provider Microsoft Access データベース SQLOLEDB Microsoft OLE DB Provider for SQL Server Microsoft SQL Server SQLNCLI10 SQL Server Native Client 10.0 Microsoft SQL Server MSDAORA Microsoft OLE DB Provider for Oracle Oracle データベース ソースコード(VB6 + ADO + OLEDB + Jet データベース)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=.hello.mdb" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + OLEDB + ACE データベース)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=.hello.accdb" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + OLEDB + SQL Server)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=SQLOLEDB;" & _ "SERVER=(local);DATABASE=master;", _ "sa", "P@ssW0rd" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + OLEDB + Oracle)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=MSDAORA;Data Source=ORCL", "scott", "tiger" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + ODBC + SQL Server)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=MSDASQL;Driver={SQL Server};" & _ "SERVER=(local);DATABASE=master;", _ "sa", "P@ssW0rd" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + ODBC + Oracle)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=MSDASQL;Driver={Microsoft ODBC for Oracle};Server=ORCL", _ "scott", "tiger" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message FROM DUAL") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
ソースコード(VB6 + ADO + ODBC + MySQL)
Option Explicit Sub Main() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "PROVIDER=MSDASQL;Driver={MySQL ODBC 5.1 Driver};Server=localhost", _ "root", "P@ssW0rd" Set rs = cn.Execute("SELECT 'Hello, ADO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-------------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close cn.Close End Sub
コンパイル方法
C:¥> vb6 /make hello.vbp
実行結果
Message ----------------- Hello, ADO World!
-
Hello, DAO(VB6) World!
Posted on 3月 3rd, 2013 by cx20
DAO
DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
DAO 12 より 64bit 版が提供されるようになったが VB6 では 32bit 版のみ利用可能となっている。クライアントアプリケーション データベースエンジン 推奨されるデータベース形式 Access 2.0 Jet 2.0 *.mdb (Jet 2.0) Access 95 Jet 3.0 *.mdb (Jet 3.x) Access 97 Jet 3.5 *.mdb (Jet 3.x) Access 2000 Jet 4.0 *.mdb (Jet 4.x) Access 2002 Jet 4.0 *.mdb (Jet 4.x) Access 2003 Jet 4.0 *.mdb (Jet 4.x) Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0) Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0) DAO 3.0 Jet 3.0 *.mdb (Jet 3.x) DAO 3.5 Jet 3.5 *.mdb (Jet 3.x) DA0 3.6 Jet 4.0 *.mdb (Jet 4.x) DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0) Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x) Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x) Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0) ソースコード(VB6 + DAO + Jet データベース)
Option Explicit Sub Main() Dim dbe Dim db Dim rs Set dbe = CreateObject("DAO.DBEngine.36") Set db = dbe.OpenDatabase("Hello.mdb") Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-----------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close db.Close End Sub
ソースコード(VB6 + DAO + ACE データベース)
Option Explicit Sub Main() Dim dbe Dim db Dim rs Set dbe = CreateObject("DAO.DBEngine.120") Set db = dbe.OpenDatabase("Hello.accdb") Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-----------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close db.Close End Sub
ソースコード(VB6 + DAO + ODBC + SQL Server)
Option Explicit Sub Main() Dim dbe Dim db Dim rs Set dbe = CreateObject("DAO.DBEngine.36") Set db = dbe.OpenDatabase("", False, False, _ "ODBC;Driver={SQL Server};" & _ "SERVER=(local);DATABASE=master;" & _ "UID=sa;PWD=P@ssW0rd;") Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message") While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-----------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close db.Close End Sub
ソースコード(VB6 + DAO + ODBC + Oracle)
Option Explicit Const dbOpenSnapshot = 4 Const dbSQLPassThrough = 64 Sub Main() Dim dbe Dim db Dim rs Set dbe = CreateObject("DAO.DBEngine.36") Set db = dbe.OpenDatabase("", False, False, _ "ODBC;Driver={Oracle in OraDb11g_home1};" & _ "DBQ=ORCL;" & _ "UID=scott;PWD=tiger;") Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message") ' パススルークエリの例(データベース側に依存する SQL を実行する場合) 'Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough) While Not rs.EOF Debug.Print rs(0).Name Debug.Print "-----------------" Debug.Print rs(0).Value rs.MoveNext Wend rs.Close db.Close End Sub
コンパイル方法
C:¥> vb6 /make hello.vbp
実行結果
Message ----------------- Hello, DAO World!
-
Hello, ODP.NET(Oxygene) World!
Posted on 3月 2nd, 2013 by cx20
ODP.NET(Oxygene)
ODP.NET(Oracle Data Provider for .NET)は、.NET ベースの Oracle Database 接続用 API である。ODAC(Oracle Data Access Component)と呼ばれるパッケージに含まれる。
.NET 環境での Oracle Database 用データプロバイダとしては、マイクロソフト社が提供する「Microsoft Oracle Client」とオラクル社が提供する「ODP.NET」があるが、現在、「Microsoft Oracle Client」はマイクロソフト社自身が非推奨としており、今後は ODP.NET の使用が推奨されている。データプロバイダ 説明 System.Data.OracleClient .NET Framework Data Provider for Oracle Oracle.DataAccess.Client Oracle Data Provider for .NET ソースコード(Oxygene + ODP.NET + Oracle)
namespace hello; interface uses System, Oracle.DataAccess.Client; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: OracleConnection; cmd: OracleCommand; reader: OracleDataReader; begin conStr := "Data Source=ORCL;User ID=scott;Password=tiger"; sqlStr := "SELECT 'Hello, ODP.NET World!' AS Message FROM DUAL"; con := new OracleConnection(conStr); cmd := new OracleCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
コンパイル方法
C:¥> oxygene Hello.pas ^ -type:exe -cputype:x86 ^ -ref:System.dll;System.Data.dll;Oracle.DataAccess.dll
実行結果
MESSAGE --------------------- Hello, ODP.NET World!
-
Hello, ADO.NET(Oxygene) World!
Posted on 3月 1st, 2013 by cx20
ADO.NET(Oxygene)
ADO.NET(ActiveX Data Objects .NET)は、ADO の後継で .NET ベースの DBMS 接続用 API である。
.NET データプロバイダを介することで様々な DBMS への接続が可能となっている。
.NET Framework 標準で使用できる .NET データプロバイダとしては、以下のようなプロバイダがある。データプロバイダ名 説明 System.Data.SqlClient Microsoft SQL Server System.Data.OleDb OLE DB System.Data.Odbc ODBC System.Data.OracleClient Oracle ソースコード(Oxygene + ADO.NET + OLE DB + Jet データベース)
namespace hello; interface uses System, System.Data.OleDb; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: OleDbConnection; cmd: OleDbCommand; reader: OleDbDataReader; begin conStr := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hello.mdb"; sqlStr := "SELECT 'Hello, ADO.NET World!' AS Message"; con := new OleDbConnection(conStr); cmd := new OleDbCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
ソースコード(Oxygene + ADO.NET + OLE DB + ACE データベース)
namespace hello; interface uses System, System.Data.OleDb; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: OleDbConnection; cmd: OleDbCommand; reader: OleDbDataReader; begin conStr := "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=hello.accdb;"; sqlStr := "SELECT 'Hello, ADO.NET World!' AS Message"; con := new OleDbConnection(conStr); cmd := new OleDbCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
ソースコード(Oxygene + ADO.NET + SQL Server)
namespace hello; interface uses System, System.Data.SqlClient; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: SqlConnection; cmd: SqlCommand; reader: SqlDataReader; begin conStr := "SERVER=(local);DATABASE=master;UID=sa;PWD=P@ssW0rd"; sqlStr := "SELECT 'Hello, ADO.NET World!' AS Message"; con := new SqlConnection(conStr); cmd := new SqlCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
ソースコード(Oxygene + ADO.NET + Oracle)
namespace hello; interface uses System, System.Data.OracleClient; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: OracleConnection; cmd: OracleCommand; reader: OracleDataReader; begin conStr := "Data Source=ORCL;User ID=scott;Password=tiger"; sqlStr := "SELECT 'Hello, ADO.NET World!' AS Message FROM DUAL"; con := new OracleConnection(conStr); cmd := new OracleCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
ソースコード(Oxygene + ADO.NET + ODBC + MySQL)
namespace hello; interface uses System, System.Data.Odbc; type Hello = class public class method Main(args: array of String): Integer; end; implementation class method Hello.Main(args: array of String): Integer; var conStr: String; sqlStr: String; con: OdbcConnection; cmd: OdbcCommand; reader: OdbcDataReader; begin conStr := "Driver={MySQL ODBC 5.1 Driver};Server=localhost;UID=root;PWD=P@ssW0rd"; sqlStr := "SELECT 'Hello, ADO.NET World!' AS Message"; con := new OdbcConnection(conStr); cmd := new OdbcCommand(sqlStr, con); con.Open(); reader := cmd.ExecuteReader(); while reader.Read() do begin System.Console.WriteLine( reader.GetName(0) ); System.Console.WriteLine( "---------------------" ); System.Console.WriteLine( reader[0] ); end; reader.Close(); con.Close(); end; end.
コンパイル方法(32bit OLE DB 使用時)
C:¥> oxygene Hello.pas ^ -type:exe -cputype:x86 ^ -ref:System.dll;System.Data.dll
コンパイル方法(64bit OLE DB 使用時)
C:¥> oxygene Hello.pas ^ -type:exe -cputype:x64 ^ -ref:System.dll;System.Data.dll
コンパイル方法(上記以外)
C:¥> oxygene Hello.pas ^ -type:exe ^ -ref:System.dll;System.Data.dll
実行結果
Message --------------------- Hello, ADO.NET World!