116272
UWSC 仮 掲示板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオン
動作不具合での質問の場合には環境を表記(OS,バージョン等)
タイトルは内容を表し、内容はネットゲーム関係禁止
自身でコードを書く気の無いナマケモノは特に質問禁止
失敗作でもコードを投稿すること(具体性の無い質問は無視される可能性大)

UWSC掲示板 が復活することを祈り、それまでの繋ぎとして。
環境設定[s7777777]

UWSCのReplace関数について。 / ほっしー
以下の文字列の3番目の文字をBBBに変えて
AAAAA=>AAABBBAAAにしたいのですが、VBAと違うのかうまくいきません。
他に良い方法がないかと思案しています。
基本的なこことはおもいますが、ご指南よろしくお願いいたします。

No.1582 2023/05/14(Sun) 01:26:23

Re: UWSCのReplace関数について。 / stuncloud
どのようなコードを書いてどうだめだったかをなるべく書くようにしてください
そこから読み取れることもあるので

> 以下の文字列の3番目の文字をBBBに変えてAAAAA=>AAABBBAAAにしたい
3番目のAをBBBにするとAABBBAAになると思われますが
AAABBBAAAになるとのことなので、要件も正確に書いてもらったほうが良いです

> VBAと違うのかうまくいきません
VBAであればどのように書いていたのかといった情報もあると良かったですね


とりあえずAAAAAをAABBBAAにする場合について考えてみましょう

やりたいことはn番目に出てくる特定の文字を別のものに置き換えるということですね
これはreplace関数だと難しそうなので、いくつかの関数を組み合わせてやることになります

まずそのn番目の文字の位置を特定する必要があります
これはpos関数でできそうです、3番目のAの位置を得るといったことができます

次に、置き換えたい文字の前後の文字列をコピーしておきます
1文字目から先程posで得た位置の前まで(前部分とします)、
そしてpos位置の次から最後まで(後部分とします)をそれぞれコピーします
これらはcopy関数でできますね

最後に 前部分 + 置き換える文字 + 後部分 と文字連結を行えば完了です
これらが正しく出来ていれば "AA" + "BBB" + "AA" となりAABBBAAが得られます
AAABBBAAAにしたい場合でもこの工程に少し変更を加えればできるはずです

No.1583 2023/05/15(Mon) 02:05:53
printウィンドウの表示について / OR
uwscのように、printウィンドウにprint出力(文字列)を表示したいと考えています。

以下のコードをエクスプローラからD&Dで実行しましたが、
灰色のウィンドウ(おそらくprintウィンドウ)が表示されるだけで、
その中に文字列が表示されません。
ログファイルには正しく出力されています。
uwscr -w test.uws で実行しても結果は同じでした。
未実装なのでしょうか?

[環境]
uwscr x64 ver0.10.0 (現在のlatest)
windows10 home

[コード]
logprint(true)
print "test"
sleep(5)

No.1579 2023/04/03(Mon) 11:10:23

Re: printウィンドウの表示について / stuncloud
確認します

追記
確認しました
実装はしてあるのですが何かが壊れているようです

print文を使う場合はコマンドプロンプトやPowerShellから
cmd /c uwscr hoge.uws
とすることでコンソール上に出力されるようになります
ご不便をおかけしますが修正までお待ち下さい

No.1580 2023/04/03(Mon) 11:29:54

Re: printウィンドウの表示について / stuncloud
print表示を修正した0.10.1をリリースしました
https://github.com/stuncloud/UWSCR/releases/tag/0.10.1

No.1581 2023/04/03(Mon) 14:01:12
CSV区切りのファイルを正しく区切って呼び出したい / けいち
お世話になります。
CSV区切りのファイルに

2023,3,1,"新規","20230215-0001",5,"箱No1,No2",1000

が保存されている時(実際は数万件あります)
たまに品名に半角カンマ「,」が含まれており品名は
ダブルクォーテーションで囲まれているのですが
数値などはダブルクォーテーションが付いていません。
SPLITを使うと品名まで分かれてしまいます。
1文字目で処理分けすると分けられるのですが件数が多い為に遅いです。
もう少しスッキリ早く終わるような方法はないでしょうか?
エクセルで開くと正しく読み込んでくれます(凄いですね)
以下コードです。

print "SPLITを使って区切りを,にした場合"
FID = fopen("data.csv",F_READ)
data = fget(FID,1)
FCLOSE(fid)
配列 = SPLIT(data,",")

for i = 0 to length(配列)-1
print 配列[i]
next

print "-------------------------------------"
print "1文字目で処理分けする"
data2 = data
while 0 < POS(",",data2)
//data2の一文字目が"
if "<#DBL>" = copy(data2,1,1) then
DBL = pos("<#DBL>",data2,2) //2個目の"を探す
print copy(data2,2,DBL-2)
data2 = copy(data2,DBL+2) //取得した分を消去

else
CAN = pos(",",data2) //,位置を探す
print copy(data2,1,CAN-1)
data2 = copy(data2,CAN+1) //取得した分を消去
endif
wend
print data2


-----結果-----
SPLITを使って区切りを,にした場合
2023
3
1
"新規"
"20230215-0001"
5
"箱No1
No2"
1000
-------------------------------------
1文字目で処理分けする
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000

No.1576 2023/03/19(Sun) 04:46:19

Re: CSV区切りのファイルを正しく区切って呼び出したい / stuncloud
fgetがcsvに対応しているのでそれを使うのが一番簡単なのではないでしょうか

fid = fopen("data.csv", F_READ)
for i = 1 to fget(fid, F_LINECOUNT)
 col = 0
 while TRUE
  col = col + 1
  value = fget(fid, i, col) // 第三引数で列を指定
  if length(value) = 0 then
   // 値が空であればループを抜ける
   // このサンプルでは空の列があることを考慮していません
   break
  else
   print value
  endif
 wend
next
fclose(fid)

// 出力
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000


ちなみにUWSCRであればsplit()でCSV分割ができるようになっているので以下のように書けます

fid = fopen("data.csv", F_READ)
for i = 1 to fget(fid, F_LINECOUNT)
 row = fget(fid, i)
 // 第5引数TRUEでCSV扱い、この場合第3第4引数は無視される
 csv = split(row, ",",,, TRUE)
 for value in csv
  print value
 next
next
fclose(fid)

// 出力
2023
3
1
新規
20230215-0001
5
箱No1,No2
1000

No.1577 2023/03/19(Sun) 11:46:15

Re: CSV区切りのファイルを正しく区切って呼び出したい / けいち
(解決)
stuncloud様
速く処理したいと1行まとめて読み込んだ結果
より遠回りをしてかえって遅くなっていたようです。
列読み込みをする方が速くなる事もあるんですね
何日も悩んであれこれ思いついた方法があっさりと覆され改善しました。
UWSCRもより拡張され使いやすくなっているのを知りました。
ありがとうございました。

No.1578 2023/03/19(Sun) 13:00:25
別ファイルのExcelのマクロをもう一つのファイルで使いたい / sen
excel_M = XLOPEN("マクロ.xlsm")
sleep(2)
excel= XLOPEN("転記先.xlsx")
sleep(2)
Excel.Run ("マクロ集!Macro1") //エラー

お世話になっております。
別ファイルのExcelのマクロをもう一つのファイルで使いたいのですが、
Runの部分でエラーになります。
()の書き方が違うのだと思いますが、分かりません。
ご教授頂けませんでしょぅか?

No.1574 2023/03/18(Sat) 15:22:40

Re: 別ファイルのExcelのマクロをもう一つのファイルで使いたい / sen
解決しました。
Excel.Run ("マクロ.xlsm!Macro1")
が正解でした。

やっぱり、uwsc最高です。
今後ともよろしくお願い申し上げます。

No.1575 2023/03/18(Sat) 15:37:04
XLGETDATAでアクティブセルの値を収得したい / sen
お世話になっております。

KBDを使用せずにXLGETDATAを使用したいのですが、
うまくいきません。
ヘルプには「省略された場合は現在の選択セル領域」と
書かれているので大丈夫そうなのですが、エラーがでます。
GETACTIVEOLEOBJを使用するのも考えたのですが、
どうしてもCOMエラーが走ります。
ご教授頂けましたら助かります。

DIM 受注番号
EXCEL = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(EXCEL,activate)
SLEEP(0.5)
受注番号=XLGETDATA(Excel)
//KBD(VK_CTRL,DOWN,10)
//KBD(VK_C,CLICK)
//KBD(VK_CTRL,UP)
SLEEP(0.5)
受注番号=GETSTR(0)
受注番号 = replace(受注番号,"<#CR>","")
print "受注番号="+受注番号+"■"

No.1560 2023/03/05(Sun) 21:41:06

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
> EXCEL = GETID("Nrb0000.CSV","XLMAIN",-1)
> 受注番号=XLGETDATA(Excel)

ここが誤りです
XLGETDATAの引数はウィンドウIDではなくExcelオブジェクトです

No.1562 2023/03/06(Mon) 17:48:52

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。
下記のように書き換えたとき、
起動済みのエクセルを捕獲して欲しいのですが、
新しくエクセルを2重にファイルを開いてしまいます。
これは、どこが間違っているのでしょうか?

DIM 受注番号
id = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(id,activate)
SLEEP(0.5)
Excel = XLOPEN("Nrb0000.CSV")
受注番号=XLGETDATA(Excel)
SLEEP(0.5)
print "受注番号="+受注番号+"■"

No.1564 2023/03/07(Tue) 22:52:41

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
> Excel = XLOPEN("Nrb0000.CSV")
で新しく開いているからです

すでに開いているものを操作する場合はgetactiveoleobjを使う必要があります
(COMエラーが出ると書かれていましたがそれについては詳細がわからないのでお答えできることはありません、ヘルプをよく見て正しく使ってください)
どうしてもだめそうなら、xlopenでファイルを開いて操作するという設計に変更することをおすすめします

No.1565 2023/03/08(Wed) 01:06:52

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ありがとうございます。
会社のパソコンではうまく捕獲できました。
ただ、自宅のパソコンでは駄目で、下記のような過去のレスを参照してみたのですが、
うまくいきません。uwscは管理者と通常の両方でやってみましたが、うまくいきません。
comエラーは、「操作を利用できません」とでます。
家で作って、会社で活用するので何とかできるようになりたいのですが、
他のヒントはないでしょうか?
ご教授頂けましたら助かります。

//
//Excel.exeを管理者として実行していて、UWSCが通常実行だと同じエラーが表示されました
//Excelの実行方法とUWSCの実行方法に差異はないでしょうか?
//      UWSC管理者 UWSC通常
//Excel管理者   ○     ×
//Excel通常    ×     ○
//https://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&page=2


DIM 受注番号
Excel = GETACTIVEOLEOBJ("Excel.Application")
id = GETID("Nrb0000.CSV","XLMAIN",-1)
CTRLWIN(id,activate)
SLEEP(0.5)
受注番号=XLGETDATA(Excel)
SLEEP(0.5)
print "受注番号="+受注番号+"■"

No.1566 2023/03/12(Sun) 13:08:47

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
Excelの修復インストールを行うか、アンインストールして再インストールで改善されるか試してみてください
No.1567 2023/03/12(Sun) 17:57:42

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。
実は今日間違ってアンインストールをしてしまって、
慌てて、Excel2021を購入してみました。
しかし、comエラーは、「操作を利用できません」とでます。

No.1568 2023/03/12(Sun) 20:57:35

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
Excelは64ビット版ですか?32ビット版ですか?
64ビットだとUWSCから使えない、ということがあるかもしれません
(UWSCが32ビットなので)

No.1569 2023/03/12(Sun) 23:46:43

Re: XLGETDATAでアクティブセルの値を収得したい / sen
64 ビットです。
No.1570 2023/03/13(Mon) 00:53:21

Re: XLGETDATAでアクティブセルの値を収得したい / sen
お世話になっております。

GETACTIVEOLEOBJを使用せずに、Excelオブジェクトを収得はできないものでしょう??

No.1571 2023/03/18(Sat) 10:55:54

Re: XLGETDATAでアクティブセルの値を収得したい / stuncloud
getactiveoleobjではなくcreateoleobjは成功しますか?
それも失敗するようであればそもそも32ビット版Excelでないと操作できないのでは?という話になります
32ビット版を試せるようならそちらでやってみてください

No.1572 2023/03/18(Sat) 11:31:12

Re: XLGETDATAでアクティブセルの値を収得したい / sen
ご返事ありがとうございます。

32ビット版は難しいのですが、XLOPENだとうまくいきます。

No.1573 2023/03/18(Sat) 13:45:43
VSCODEの環境 / taro
VSCODEでのUWSCの開発をしたいのですが、拡張機能がない旨のエラーメッセージがでて困っています。

https://marketplace.visualstudio.com/items?itemName=nalulabo.uwsc-support
上記のリンクも今一インストールの方法がわからず頓挫しております。

現在、詳細なインストール方法が掲載されているサイトをさがています。

ご存じの方がおられましたら、リンクをよろしくお願いします。

No.1561 2023/03/06(Mon) 14:02:45

Re: VSCODEの環境 / stuncloud
VSCodeの拡張機能のパネルを開いて、パネル上の検索バーで「UWSC」と入力して表示された拡張機能を選択し、インストールボタンを押すだけです
デフォルトのキーバインドであればCtrl+Shift+Xで拡張機能のパネルが開けます

ただしこの拡張機能はシンタックスハイライトしか提供されていないことに注意してください
(補完機能などはありません)

No.1563 2023/03/06(Mon) 17:54:37
処理が歯抜けになる / YMK
データ群にアクセスし、高速化のために同時進行処理しているのですが、
処理が歯抜けになってしまいます。

以下は、症状が起きるプログラムですが、
1〜30000の数字が(スレッド処理なので順番はともかく)全て出力されるはずですが、
実際には、7522〜7541が抜けたり、4239〜4261が抜けたり、また、やるときによって抜ける箇所がバラバラになってしまいます、、

どのような修正をすれば良いかご教授下さい。

--------------------------------------------------------
Public str = "",スレッド数 = 0 ,フラグ[100000]

for i = 1 to 30000 step 20
thread 情報取得(i)
スレッド数 = スレッド数 +1
while スレッド数 > 60 //スレッドは60を超えないように
wend
next

for i = 1 to 30000 step 20//全てのスレッドの完了待ち
while フラグ[i] <> 1
sleep(0.001)
wend
next

//結果をテキストに出力
f = fopen("test.txt",F_WRITE)
fput(f,str) ; fclose(f)

PROCEDURE 情報取得(i)
for num = 0 to 19
str = str +(i +num) +"<#cr>"
next

スレッド数 = スレッド数 -1
フラグ[i] = 1
fend

No.1557 2023/02/27(Mon) 10:20:23

Re: 処理が歯抜けになる / stuncloud
> str = str +(i +num) +"<#cr>"
この部分ですかねえ…排他制御なんかがあったほうが良い気がします
ただ、そうするとせっかくthreadで並行処理してるのにstrに詰めるところがボトルネックになりそうですよね

とにかく結果をすべて変数strに入れていくというのがどう見ても悪手なので、まずはそこを見直すのが良いのではないでしょうか
この場合であれば情報取得関数内でF_EXCLUSIVEを付けて書き出すとか?

例示されたコードに関してはこうかな?という話で、実際の解決策はケースバイケースだと思います
ただ、threadでグローバル変数を随時書き換えていくというのはやるべきではないでしょう

No.1558 2023/02/27(Mon) 16:26:39

Re: 処理が歯抜けになる / YMK
stuncloud 様、ご返信有り難うございます。

>threadでグローバル変数を随時書き換えていくというのはやるべきではない

strに随時追記するのではなく、別途配列に代入させたら安定させることが出来ました。

有り難うございました。

No.1559 2023/02/27(Mon) 19:48:33
CREATEFORMで生成したウインドウを全画面にしたい / けいち

CREATEFORMで作ったウインドウを画面いっぱいにしたいのですがオプションを見ても
最大化ボタンまででタイトルバーが残ります。
ウインドウのIDを取得してCTRLWINから最大化も同様でした
なにか特殊な方法が必要でしょうか?
過去ログから探してみましたがそれらしきスレを参考にしましたがリンク先は既に無くなっていました。
良い方法は無いでしょうか?

No.1552 2023/02/21(Tue) 22:23:22

Re: CREATEFORMで生成したウインドウを全画面にしたい / stuncloud
SetWindowLongでウィンドウスタイルを変更し、WS_POPUP or WS_VISIBLEのみにするとクライアント領域だけが表示される (タイトルバーなどが消える) ようです
その後画面幅いっぱいまでウィンドウをリサイズすればフルスクリーンのような表示にできると思います
事前にGetWindowLongでもともとのスタイルを保持しておけば、再度SetWindowLongを実行することで元のウィンドウの状態に戻せます
スタイルの取得・変更はGWL_STYLEです

No.1553 2023/02/21(Tue) 23:02:14

Re: CREATEFORMで生成したウインドウを全画面にしたい / けいち
stuncloud様
レスありがとうございます。
SetWindowLongAを検索しながら下記のようなサンプルを作っています
いろいろな検索結果からためしていますが
使い方がわからずエラーがでてしまいます。
どのようにすればできるでしょうか?

DEF_DLL GetWindowLongA(HWND, int): dword: User32
DEF_DLL SetWindowLongA(HWND, int, dword): dword: User32
CONST GWL_STYLE = -16
CONST WS_CAPTION = $C00000


// フォーム作成
obj = CREATEFORM("about:blank", "タイトル", True, FOM_NOHIDE,200,200,0,0)  // フォーム生成
obj.ToolBar = False
obj.StatusBar = False
SetWindowLongA(obj.Hwnd, GWL_STYLE, GetWindowLongA(obj.Hwnd, GWL_STYLE) - WS_CAPTION)

obj.Document.write(フォーム)       // HTMLを書き込む

while obj.Visible              // 画面が出ている間
  ifb GETFORMDATA("OKボタン") then // OKボタンが押された
MSGBOX("OK押した")
  endif
  Sleep(1)
wend

TextBlock フォーム
 <form method="POST">
  <input type="submit" value=" OK " name="OKボタン">

 </form>
EndTextBlock

No.1554 2023/02/22(Wed) 11:48:41

Re: CREATEFORMで生成したウインドウを全画面にしたい / stuncloud
> 使い方がわからずエラーがでてしまいます。
エラーで止まった場合は
・どの行で発生したのか
・エラーメッセージ
を書いてもらわないとわかりません
この二点は必ず書くようにしてください

結論から言うと悪いのは
> obj.Hwnd
です、CreateFormのオブジェクトにhwndというプロパティはありません
このあたりはエラーメッセージがCOMエラーであることから簡単に推察できますね (def_dllの関数はCOMエラーを吐かない)

エラーメッセージをちゃんと読むことや
> SetWindowLongA(obj.Hwnd, GWL_STYLE, GetWindowLongA(obj.Hwnd, GWL_STYLE) - WS_CAPTION)
といった書き方をやめてGetWindowLongAの引数を変数に取るなどをしつつ問題点の切り分けをしていけばエラー原因も特定できたと思います
もう少し頑張りましょう


それはそれとして、上記コードを改変してフルスクリーンのサンプルを書いてみました

DEF_DLL GetWindowLongA(HWND, int): dword: User32
DEF_DLL SetWindowLongA(HWND, int, dword): dword: User32
CONST GWL_STYLE = -16
// CONST WS_CAPTION = $C00000
const WS_POPUP = $80000000
const WS_VISIBLE = $10000000

// フォーム作成
obj = CREATEFORM("about:blank", "タイトル", True, FOM_NOHIDE,200,200,100,100)
obj.ToolBar = False
obj.StatusBar = False
id = getid(GET_FORM_WIN)
hwnd = idtohnd(id)
oldstyle = GetWindowLongA(hwnd, GWL_STYLE)
newstyle = WS_POPUP + WS_VISIBLE

obj.Document.write(フォーム)

while obj.visible
 if getformdata("フルスクリーン") then
  SetWindowLongA(hwnd, GWL_STYLE, newstyle)
  ctrlwin(id, MAX)
 elseif getformdata("元に戻す") then
  ctrlwin(id, NORMAL)
  SetWindowLongA(hwnd, GWL_STYLE, oldstyle)
 endif
wend

TextBlock フォーム
<form method="POST">
<input type="submit" value="フルスクリーン" name="フルスクリーン">
<input type="submit" value="元に戻す" name="元に戻す">
</form>
EndTextBlock

No.1555 2023/02/22(Wed) 13:55:34

Re: CREATEFORMで生成したウインドウを全画面にしたい / けいち
stuncloud様
エラー特定の方法やサンプルコードまで頂き感謝致します。
元のサイズに戻す方法も大変参考になりました。
貴重なお時間を割いて頂きありがとうございました。

No.1556 2023/02/22(Wed) 22:36:26
UWSCの文字列の結合について / haku
CSVからデータベースへレコードを登録しようとしています。
その際に大量に文字列の結合が必要なのですが、想像していた以上に処理が遅くて困っています。
速度をアップさせる方法がないでしょうか?

No.1550 2023/02/16(Thu) 17:44:34

Re: UWSCの文字列の結合について / stuncloud
要約すると
・CSVから得たデータをDBに書き込む
・文字列結合処理がある
・一連の処理が遅く感じる
・早くしたい
という内容なのでこれだけだと回答は難しいです

処理が遅いのは文字列結合部分だけなのでしょうか?そもそも文字列結合は本当に遅いのでしょうか?
一連の処理の要所要所で実行時間を計測し、遅い部分を突き止めつつそのコードの提示をしてもらうといったことをしていただく必要があるように思います

No.1551 2023/02/16(Thu) 18:42:46
UWSCからsqlite3.dllを使ってDB操作 / トリビア
UWSCからsqlite3のデータベースを扱いたく、exe版を利用していましたが、
DEF_DLLでsqlite3.dllを呼び出し使用する方法を探しています。
こちら方法をご教示いただけないでしょうか。

No.1544 2023/02/11(Sat) 00:02:35

Re: UWSCからsqlite3.dllを使ってDB操作 / stuncloud
C++ですがわかりやすいものがありました
https://seraphy.hatenablog.com/entry/20061031/p1
sqlite3_open16()でDBに接続してsqlite3_exec()でSQLを実行する、という流れのようですね
sqlite3_openだとUTF8ですがsqlite3_open16ならUTF16を使うようです
UWSCであればUTF16のほうが使いやすいと思います (def_dllの際にwstringを使う)

関数の解説は以下から見れます、ちょっと読みにくい…
https://www.sqlite.org/c3ref/funclist.html

def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, wstring, dword, dword, dword):int:sqlite3.dll
でいいのかな?あまり自信ないですがいろいろ試してみてください
・openの第二引数はポインタのポインタなのでここで得られた値(アドレス)の先にある値を取らないとDBハンドルのポインタにならない気がする
 ・{var dword} でなんとかならんか?RtlCopyMemoryするのが無難か
・dwordのとこにNULLを入れる場合はNULLではなく0でいいです

No.1545 2023/02/11(Sat) 01:37:25

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
stuncloudさん
ご教示ありがとうございます。
いただいた情報をもとに少し試行錯誤してみます!
またご報告いたします

No.1546 2023/02/11(Sat) 11:42:08

Re: UWSCからsqlite3.dllを使ってDB操作 / stuncloud
sqlite3_open16の第二引数、ポインタのポインタについて補足します

まず、var dwordとしてポインタを32ビット整数として受けます
ポインタなので受けた値が示すのはメモリ上のアドレスとなります
このアドレス上にある値がsqliteのハンドルのポインタです (sqlite3_execに渡す値)
あるアドレスが示す先にある値を任意の型で得るための関数が以下になります

def_dll RtlMoveMemory(var dword, dword, dword):kernel32

第一引数で得たい値を受けます、ポインタなので型をdwordとします

コード例は以下の通りです (コードの検証はしていないためこの通りに動かない可能性があります)

ppdb = 0
sqlite3_open16(filename, ppdb) // ハンドルのポインタのポインタをppdb変数で受ける

// ハンドルのポインタを受ける変数
pdb = 0
RtlMoveMemory(pdb, ppdb, 4) // ppdbが示すアドレスにあるデータをdword型としてpdbに受ける


sqlite3_exec(pdb, sql)

No.1547 2023/02/11(Sat) 12:46:43

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
詳細な解説をいただき、ありがとうございます。
引き続き下記ですが操作が出来ないので試行錯誤してみます!


def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, wstring, dword, dword, dword):int:sqlite3.dll
def_dll sqlite3_close(wstring):int:sqlite3.dll
def_dll RtlMoveMemory(var dword, dword, dword):kernel32

ppdb=0
sqlite3_open16("sample1.db",ppdb)

pdb=0
RtlMoveMemory(pdb, ppdb, 4)

sqlite3_exec(pdb, "create table Data(id, name);")
sqlite3_exec(pdb, "insert into Data(id, name) values (1,2);")
sqlite3_close(pdb)

No.1548 2023/02/11(Sat) 13:37:49

Re: UWSCからsqlite3.dllを使ってDB操作 / トリビア
色々と教えていただきましたが、下記で操作できるようになりましたので、
ご報告いたします。ありがとうございました。

def_dll sqlite3_open16(wstring, var dword):int:sqlite3.dll
def_dll sqlite3_exec(dword, dword, dword, dword, dword):int:sqlite3.dll
def_dll sqlite3_close(dword):int:sqlite3.dll
def_dll RtlMoveMemory(var dword, var dword, dword):kernel32

ppdb=0
ret=sqlite3_open16("sample1.db",ppdb);

pdb=0
RtlMoveMemory(pdb, ppdb, 4)

ret=sqlite3_exec(pdb, "create table Data(id, name);",0,0,0)
ret=sqlite3_exec(pdb, "insert into Data(id, name) values (1,2);",0,0,0)
ret=sqlite3_close(pdb);

No.1549 2023/02/12(Sun) 21:03:55

以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 20 >> ]

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS