RasDialDlgW
関数シグネチャ
// RASDLG.dll (Unicode / -W)
#include <windows.h>
BOOL RasDialDlgW(
LPWSTR lpszPhonebook, // optional
LPWSTR lpszEntry, // optional
LPWSTR lpszPhoneNumber, // optional
RASDIALDLG* lpInfo
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| lpszPhonebook | LPWSTR | inoptional | フォンブック (PBK) ファイルの完全なパスとファイル名を指定する、null で終わる文字列へのポインター。このパラメーターが NULL の場合、関数は現在の既定のフォンブック ファイルを使用します。既定のフォンブック ファイルは、ダイヤルアップ ネットワーク ダイアログ ボックスの ユーザー設定 プロパティ シートでユーザーが選択したものです。 |
| lpszEntry | LPWSTR | inoptional | ダイヤルするフォンブック エントリの名前を指定する、null で終わる文字列へのポインター。 |
| lpszPhoneNumber | LPWSTR | inoptional | フォンブック エントリに格納されている電話番号を上書きする電話番号を指定する、null で終わる文字列へのポインター。このパラメーターが NULL の場合、 RasDialDlg はフォンブック エントリ内の電話番号を使用します。 |
| lpInfo | RASDIALDLG* | inout | 追加の入力パラメーターおよび出力パラメーターを指定する RASDIALDLG 構造体へのポインター。この構造体の dwSize メンバーには sizeof(RASDIALDLG) を指定する必要があります。エラーが発生した場合、dwError メンバーにエラー コードが返されます。それ以外の場合は 0 が返されます。 |
戻り値の型: BOOL
公式ドキュメント
RasDialDlg 関数は、指定されたフォンブック エントリとログオンしているユーザーの資格情報を使用して RAS 接続を確立します。この関数は、接続操作の状態を示す一連のダイアログ ボックスを表示します。(Unicode)
戻り値
関数が RAS 接続を確立した場合、戻り値は TRUE です。それ以外の場合、この関数は FALSE を返します。
エラーが発生した場合、RasDialDlg は RASDIALDLG 構造体の dwError メンバーに、ルーティングとリモート アクセスのエラー コード または Winerror.h の値を設定します。
解説(Remarks)
RasDialDlg 関数は、ユーザーがメインの ダイヤルアップ ネットワーク ダイアログ ボックスで ダイヤル ボタンを選択したときに表示されるダイアログ ボックスと同様の一連のダイアログ ボックスを表示します。メインのフォンブック ダイアログ ボックスを表示せずに、接続操作用の標準的なユーザー インターフェイスを表示するには、 RasDialDlg 関数を使用します。たとえば、RAS 自動ダイヤル サービスは、リモート アドレスに関連付けられたフォンブック エントリを使用して接続を確立するために、この関数を使用します。
RasDialDlg 関数は、接続操作中にダイアログ ボックスを表示して、操作の進行状況に関するフィードバックをユーザーに提供します。たとえば、ダイアログ ボックスは、ダイヤル中であることや、リモート サーバーでユーザーの資格情報を認証中であることなどを示します。また、ダイアログ ボックスには、ユーザーが操作を終了するための キャンセル ボタンも用意されています。
RasDialDlg は、接続が確立されたとき、またはユーザーが操作をキャンセルしたときに戻ります。
次のサンプル コードは、変数 lpszEntry で指定された既定のフォンブック内のエントリにダイヤルします。
#include <windows.h>
#include <stdio.h>
#include "ras.h"
#include "rasdlg.h"
#include <tchar.h>
#include "strsafe.h"
#define PHONE_NUMBER_LENGTH 7
#define DEVICE_NAME_LENGTH 5
#define DEVICE_TYPE_LENGTH 5
DWORD __cdecl wmain(){
DWORD dwError = ERROR_SUCCESS;
BOOL nRet = TRUE;
LPTSTR lpszEntry = L"EntryName";
LPTSTR lpszphonenumber = L"5555555";
LPTSTR lpszdevicename = L"Modem";
LPTSTR lpszdevicetype = RASDT_Modem;
// Allocate heap memory and initialize RASENTRY structure
LPRASENTRY lpentry = (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASENTRY));
// Allocate heap memory and initialize RASDIALDLG structure
LPRASDIALDLG lpInfo = (LPRASDIALDLG) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASDIALDLG));
if (lpentry == NULL || lpInfo == NULL){
wprintf(L"HeapAlloc failed");
HeapFree(GetProcessHeap(), 0, lpentry);
HeapFree(GetProcessHeap(), 0, lpInfo);
return 0;
}
// The RASDIALDLG and RASENTRY dwSize members have to be initialized or the RasDialDlg()
// RasSetEntryProperties() APIs will fail below.
lpInfo->dwSize = sizeof(RASDIALDLG);
lpentry->dwSize = sizeof(RASENTRY);
lpentry->dwFramingProtocol = RASFP_Ppp;
lpentry->dwfOptions = 0;
lpentry->dwType = RASFP_Ppp;
dwError |= StringCchCopyN(lpentry->szLocalPhoneNumber, RAS_MaxPhoneNumber, lpszphonenumber, PHONE_NUMBER_LENGTH);
dwError |= StringCchCopyN(lpentry->szDeviceName, RAS_MaxDeviceName, lpszdevicename, DEVICE_NAME_LENGTH);
dwError |= StringCchCopyN(lpentry->szDeviceType, RAS_MaxDeviceType, lpszdevicetype, DEVICE_TYPE_LENGTH);
if (dwError != S_OK){
wprintf(L"Structure initialization failed: Error = %d\n", dwError);
HeapFree(GetProcessHeap(), 0, lpentry);
HeapFree(GetProcessHeap(), 0, lpInfo);
return 0;
}
// Validate the new entry's name
dwError = RasValidateEntryName(NULL, lpszEntry);
if (dwError != ERROR_SUCCESS){
wprintf(L"RasValidateEntryName failed: Error = %d\n", dwError);
HeapFree(GetProcessHeap(), 0, lpentry);
HeapFree(GetProcessHeap(), 0, lpInfo);
return 0;
}
// Create and set the new entry's properties
dwError = RasSetEntryProperties(NULL, lpszEntry, lpentry, lpentry->dwSize, NULL, 0);
if (dwError != ERROR_SUCCESS){
wprintf(L"RasSetEntryProperties failed: Error = %d\n", dwError);
HeapFree(GetProcessHeap(), 0, lpentry);
HeapFree(GetProcessHeap(), 0, lpInfo);
return 0;
}
// Connect using the new entry
nRet = RasDialDlg(NULL, lpszEntry, NULL, lpInfo);
if (nRet != TRUE){
wprintf(L"RasDialDlg failed: Error = %d\n", lpInfo->dwError);
}
// Clean up: delete the new entry
dwError = RasDeleteEntry(NULL, lpszEntry);
if (dwError != ERROR_SUCCESS){
wprintf(L"RasDeleteEntry failed: Error = %d\n", dwError);
}
HeapFree(GetProcessHeap(), 0, lpentry);
HeapFree(GetProcessHeap(), 0, lpInfo);
return 0;
}
rasdlg.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして RasDialDlg を定義します。エンコード中立のエイリアスの使用と、エンコード中立でないコードを混在させると、不整合が生じ、コンパイル エラーや実行時エラーの原因となる可能性があります。詳細については、関数プロトタイプの規則 を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// RASDLG.dll (Unicode / -W)
#include <windows.h>
BOOL RasDialDlgW(
LPWSTR lpszPhonebook, // optional
LPWSTR lpszEntry, // optional
LPWSTR lpszPhoneNumber, // optional
RASDIALDLG* lpInfo
);[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("RASDLG.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern bool RasDialDlgW(
[MarshalAs(UnmanagedType.LPWStr)] string lpszPhonebook, // LPWSTR optional
[MarshalAs(UnmanagedType.LPWStr)] string lpszEntry, // LPWSTR optional
[MarshalAs(UnmanagedType.LPWStr)] string lpszPhoneNumber, // LPWSTR optional
IntPtr lpInfo // RASDIALDLG* in/out
);<DllImport("RASDLG.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Public Shared Function RasDialDlgW(
<MarshalAs(UnmanagedType.LPWStr)> lpszPhonebook As String, ' LPWSTR optional
<MarshalAs(UnmanagedType.LPWStr)> lpszEntry As String, ' LPWSTR optional
<MarshalAs(UnmanagedType.LPWStr)> lpszPhoneNumber As String, ' LPWSTR optional
lpInfo As IntPtr ' RASDIALDLG* in/out
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function' lpszPhonebook : LPWSTR optional
' lpszEntry : LPWSTR optional
' lpszPhoneNumber : LPWSTR optional
' lpInfo : RASDIALDLG* in/out
Declare PtrSafe Function RasDialDlgW Lib "rasdlg" ( _
ByVal lpszPhonebook As LongPtr, _
ByVal lpszEntry As LongPtr, _
ByVal lpszPhoneNumber As LongPtr, _
ByVal lpInfo As LongPtr) As Long
' Unicode(W): 文字列は ByVal As LongPtr とし StrPtr(unicodeStr) を渡す
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
RasDialDlgW = ctypes.windll.rasdlg.RasDialDlgW
RasDialDlgW.restype = wintypes.BOOL
RasDialDlgW.argtypes = [
wintypes.LPCWSTR, # lpszPhonebook : LPWSTR optional
wintypes.LPCWSTR, # lpszEntry : LPWSTR optional
wintypes.LPCWSTR, # lpszPhoneNumber : LPWSTR optional
ctypes.c_void_p, # lpInfo : RASDIALDLG* in/out
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('RASDLG.dll')
RasDialDlgW = Fiddle::Function.new(
lib['RasDialDlgW'],
[
Fiddle::TYPE_VOIDP, # lpszPhonebook : LPWSTR optional
Fiddle::TYPE_VOIDP, # lpszEntry : LPWSTR optional
Fiddle::TYPE_VOIDP, # lpszPhoneNumber : LPWSTR optional
Fiddle::TYPE_VOIDP, # lpInfo : RASDIALDLG* in/out
],
Fiddle::TYPE_INT)
# Wide strings: pass str.encode("UTF-16LE") + "\x00\x00"#[link(name = "rasdlg")]
extern "system" {
fn RasDialDlgW(
lpszPhonebook: *mut u16, // LPWSTR optional
lpszEntry: *mut u16, // LPWSTR optional
lpszPhoneNumber: *mut u16, // LPWSTR optional
lpInfo: *mut RASDIALDLG // RASDIALDLG* in/out
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("RASDLG.dll", CharSet = CharSet.Unicode)]
public static extern bool RasDialDlgW([MarshalAs(UnmanagedType.LPWStr)] string lpszPhonebook, [MarshalAs(UnmanagedType.LPWStr)] string lpszEntry, [MarshalAs(UnmanagedType.LPWStr)] string lpszPhoneNumber, IntPtr lpInfo);
"@
$api = Add-Type -MemberDefinition $sig -Name 'RASDLG_RasDialDlgW' -Namespace Win32 -PassThru
# $api::RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)#uselib "RASDLG.dll"
#func global RasDialDlgW "RasDialDlgW" wptr, wptr, wptr, wptr
; RasDialDlgW lpszPhonebook, lpszEntry, lpszPhoneNumber, varptr(lpInfo) ; 戻り値は stat
; lpszPhonebook : LPWSTR optional -> "wptr"
; lpszEntry : LPWSTR optional -> "wptr"
; lpszPhoneNumber : LPWSTR optional -> "wptr"
; lpInfo : RASDIALDLG* in/out -> "wptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "RASDLG.dll" #cfunc global RasDialDlgW "RasDialDlgW" wstr, wstr, wstr, var ; res = RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo) ; lpszPhonebook : LPWSTR optional -> "wstr" ; lpszEntry : LPWSTR optional -> "wstr" ; lpszPhoneNumber : LPWSTR optional -> "wstr" ; lpInfo : RASDIALDLG* in/out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。#uselib "RASDLG.dll" #cfunc global RasDialDlgW "RasDialDlgW" wstr, wstr, wstr, sptr ; res = RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, varptr(lpInfo)) ; lpszPhonebook : LPWSTR optional -> "wstr" ; lpszEntry : LPWSTR optional -> "wstr" ; lpszPhoneNumber : LPWSTR optional -> "wstr" ; lpInfo : RASDIALDLG* in/out -> "sptr" ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。
; BOOL RasDialDlgW(LPWSTR lpszPhonebook, LPWSTR lpszEntry, LPWSTR lpszPhoneNumber, RASDIALDLG* lpInfo) #uselib "RASDLG.dll" #cfunc global RasDialDlgW "RasDialDlgW" wstr, wstr, wstr, var ; res = RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo) ; lpszPhonebook : LPWSTR optional -> "wstr" ; lpszEntry : LPWSTR optional -> "wstr" ; lpszPhoneNumber : LPWSTR optional -> "wstr" ; lpInfo : RASDIALDLG* in/out -> "var" ; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。; BOOL RasDialDlgW(LPWSTR lpszPhonebook, LPWSTR lpszEntry, LPWSTR lpszPhoneNumber, RASDIALDLG* lpInfo) #uselib "RASDLG.dll" #cfunc global RasDialDlgW "RasDialDlgW" wstr, wstr, wstr, intptr ; res = RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, varptr(lpInfo)) ; lpszPhonebook : LPWSTR optional -> "wstr" ; lpszEntry : LPWSTR optional -> "wstr" ; lpszPhoneNumber : LPWSTR optional -> "wstr" ; lpInfo : RASDIALDLG* in/out -> "intptr" ; ※出力/バッファ引数はポインタ方式(token=intptr / 呼び出しは varptr(変数))。
import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
rasdlg = windows.NewLazySystemDLL("RASDLG.dll")
procRasDialDlgW = rasdlg.NewProc("RasDialDlgW")
)
// lpszPhonebook (LPWSTR optional), lpszEntry (LPWSTR optional), lpszPhoneNumber (LPWSTR optional), lpInfo (RASDIALDLG* in/out)
r1, _, err := procRasDialDlgW.Call(
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(lpszPhonebook))),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(lpszEntry))),
uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(lpszPhoneNumber))),
uintptr(lpInfo),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // BOOLfunction RasDialDlgW(
lpszPhonebook: PWideChar; // LPWSTR optional
lpszEntry: PWideChar; // LPWSTR optional
lpszPhoneNumber: PWideChar; // LPWSTR optional
lpInfo: Pointer // RASDIALDLG* in/out
): BOOL; stdcall;
external 'RASDLG.dll' name 'RasDialDlgW';result := DllCall("RASDLG\RasDialDlgW"
, "WStr", lpszPhonebook ; LPWSTR optional
, "WStr", lpszEntry ; LPWSTR optional
, "WStr", lpszPhoneNumber ; LPWSTR optional
, "Ptr", lpInfo ; RASDIALDLG* in/out
, "Int") ; return: BOOL●RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo) = DLL("RASDLG.dll", "bool RasDialDlgW(char*, char*, char*, void*)")
# 呼び出し: RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)
# lpszPhonebook : LPWSTR optional -> "char*"
# lpszEntry : LPWSTR optional -> "char*"
# lpszPhoneNumber : LPWSTR optional -> "char*"
# lpInfo : RASDIALDLG* in/out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※-W(Unicode)関数。なでしこ1はANSIのため -A 版の利用を推奨。const std = @import("std");
extern "rasdlg" fn RasDialDlgW(
lpszPhonebook: [*c]const u16, // LPWSTR optional
lpszEntry: [*c]const u16, // LPWSTR optional
lpszPhoneNumber: [*c]const u16, // LPWSTR optional
lpInfo: [*c]RASDIALDLG // RASDIALDLG* in/out
) callconv(std.os.windows.WINAPI) i32;
// Unicode(-W): UTF-16LE のヌル終端バッファ([*c]const u16)を渡す。proc RasDialDlgW(
lpszPhonebook: WideCString, # LPWSTR optional
lpszEntry: WideCString, # LPWSTR optional
lpszPhoneNumber: WideCString, # LPWSTR optional
lpInfo: ptr RASDIALDLG # RASDIALDLG* in/out
): int32 {.importc: "RasDialDlgW", stdcall, dynlib: "RASDLG.dll".}
# Unicode(-W): WideCString は newWideCString("...") で生成。pragma(lib, "rasdlg");
extern(Windows)
int RasDialDlgW(
const(wchar)* lpszPhonebook, // LPWSTR optional
const(wchar)* lpszEntry, // LPWSTR optional
const(wchar)* lpszPhoneNumber, // LPWSTR optional
RASDIALDLG* lpInfo // RASDIALDLG* in/out
);ccall((:RasDialDlgW, "RASDLG.dll"), stdcall, Int32,
(Cwstring, Cwstring, Cwstring, Ptr{RASDIALDLG}),
lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)
# lpszPhonebook : LPWSTR optional -> Cwstring
# lpszEntry : LPWSTR optional -> Cwstring
# lpszPhoneNumber : LPWSTR optional -> Cwstring
# lpInfo : RASDIALDLG* in/out -> Ptr{RASDIALDLG}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
# Unicode(-W): Cwstring には transcode(UInt16, "...") 等で UTF-16 を渡す。local ffi = require("ffi")
ffi.cdef[[
int32_t RasDialDlgW(
const uint16_t* lpszPhonebook,
const uint16_t* lpszEntry,
const uint16_t* lpszPhoneNumber,
void* lpInfo);
]]
local rasdlg = ffi.load("rasdlg")
-- rasdlg.RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)
-- lpszPhonebook : LPWSTR optional
-- lpszEntry : LPWSTR optional
-- lpszPhoneNumber : LPWSTR optional
-- lpInfo : RASDIALDLG* in/out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
-- Unicode(-W): uint16_t* には UTF-16LE のバッファ(ffi.new("uint16_t[?]", ...))を渡す。const koffi = require('koffi');
const lib = koffi.load('RASDLG.dll');
const RasDialDlgW = lib.func('__stdcall', 'RasDialDlgW', 'int32_t', ['str16', 'str16', 'str16', 'void *']);
// RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)
// lpszPhonebook : LPWSTR optional -> 'str16'
// lpszEntry : LPWSTR optional -> 'str16'
// lpszPhoneNumber : LPWSTR optional -> 'str16'
// lpInfo : RASDIALDLG* in/out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("RASDLG.dll", {
RasDialDlgW: { parameters: ["buffer", "buffer", "buffer", "pointer"], result: "i32" },
});
// lib.symbols.RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo)
// lpszPhonebook : LPWSTR optional -> "buffer"
// lpszEntry : LPWSTR optional -> "buffer"
// lpszPhoneNumber : LPWSTR optional -> "buffer"
// lpInfo : RASDIALDLG* in/out -> "pointer"
// 文字列は "buffer"。Unicode(-W) は new TextEncoder() ではなく UTF-16LE のバイト列(末尾に \x00\x00)を Uint8Array で渡す。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t RasDialDlgW(
const uint16_t* lpszPhonebook,
const uint16_t* lpszEntry,
const uint16_t* lpszPhoneNumber,
void* lpInfo);
C, "RASDLG.dll");
// $ffi->RasDialDlgW(lpszPhonebook, lpszEntry, lpszPhoneNumber, lpInfo);
// lpszPhonebook : LPWSTR optional
// lpszEntry : LPWSTR optional
// lpszPhoneNumber : LPWSTR optional
// lpInfo : RASDIALDLG* in/out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Rasdlg extends StdCallLibrary {
Rasdlg INSTANCE = Native.load("rasdlg", Rasdlg.class, W32APIOptions.UNICODE_OPTIONS);
boolean RasDialDlgW(
WString lpszPhonebook, // LPWSTR optional
WString lpszEntry, // LPWSTR optional
WString lpszPhoneNumber, // LPWSTR optional
Pointer lpInfo // RASDIALDLG* in/out
);
}
// Unicode(-W): WString(入力)/char[](出力)で UTF-16 をマーシャリング。@[Link("rasdlg")]
lib LibRASDLG
fun RasDialDlgW = RasDialDlgW(
lpszPhonebook : UInt16*, # LPWSTR optional
lpszEntry : UInt16*, # LPWSTR optional
lpszPhoneNumber : UInt16*, # LPWSTR optional
lpInfo : RASDIALDLG* # RASDIALDLG* in/out
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef RasDialDlgWNative = Int32 Function(Pointer<Utf16>, Pointer<Utf16>, Pointer<Utf16>, Pointer<Void>);
typedef RasDialDlgWDart = int Function(Pointer<Utf16>, Pointer<Utf16>, Pointer<Utf16>, Pointer<Void>);
final RasDialDlgW = DynamicLibrary.open('RASDLG.dll')
.lookupFunction<RasDialDlgWNative, RasDialDlgWDart>('RasDialDlgW');
// lpszPhonebook : LPWSTR optional -> Pointer<Utf16>
// lpszEntry : LPWSTR optional -> Pointer<Utf16>
// lpszPhoneNumber : LPWSTR optional -> Pointer<Utf16>
// lpInfo : RASDIALDLG* in/out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function RasDialDlgW(
lpszPhonebook: PWideChar; // LPWSTR optional
lpszEntry: PWideChar; // LPWSTR optional
lpszPhoneNumber: PWideChar; // LPWSTR optional
lpInfo: Pointer // RASDIALDLG* in/out
): BOOL; stdcall;
external 'RASDLG.dll' name 'RasDialDlgW';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "RasDialDlgW"
c_RasDialDlgW :: CWString -> CWString -> CWString -> Ptr () -> IO CInt
-- lpszPhonebook : LPWSTR optional -> CWString
-- lpszEntry : LPWSTR optional -> CWString
-- lpszPhoneNumber : LPWSTR optional -> CWString
-- lpInfo : RASDIALDLG* in/out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let rasdialdlgw =
foreign "RasDialDlgW"
((ptr uint16_t) @-> (ptr uint16_t) @-> (ptr uint16_t) @-> (ptr void) @-> returning int32_t)
(* lpszPhonebook : LPWSTR optional -> (ptr uint16_t) *)
(* lpszEntry : LPWSTR optional -> (ptr uint16_t) *)
(* lpszPhoneNumber : LPWSTR optional -> (ptr uint16_t) *)
(* lpInfo : RASDIALDLG* in/out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library rasdlg (t "RASDLG.dll"))
(cffi:use-foreign-library rasdlg)
(cffi:defcfun ("RasDialDlgW" ras-dial-dlg-w :convention :stdcall) :int32
(lpsz-phonebook (:string :encoding :utf-16le)) ; LPWSTR optional
(lpsz-entry (:string :encoding :utf-16le)) ; LPWSTR optional
(lpsz-phone-number (:string :encoding :utf-16le)) ; LPWSTR optional
(lp-info :pointer)) ; RASDIALDLG* in/out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $RasDialDlgW = Win32::API::More->new('RASDLG',
'BOOL RasDialDlgW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry, LPCWSTR lpszPhoneNumber, LPVOID lpInfo)');
# my $ret = $RasDialDlgW->Call($lpszPhonebook, $lpszEntry, $lpszPhoneNumber, $lpInfo);
# lpszPhonebook : LPWSTR optional -> LPCWSTR
# lpszEntry : LPWSTR optional -> LPCWSTR
# lpszPhoneNumber : LPWSTR optional -> LPCWSTR
# lpInfo : RASDIALDLG* in/out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。
# Unicode(-W): LPCWSTR/LPWSTR は Win32::API が UTF-16 変換を行う。関連項目
- f RasDialDlgA (ANSI版) — RAS接続のダイヤルダイアログを表示し接続を行う(ANSI版)。
- f RasPhonebookDlgW — RAS電話帳メインダイアログを表示する(Unicode版)。