Delphiで簡単なLPを解きたいのですが、上手くコンパイル出来ませんでした。どのように直せばいいかアドバイス頂きたいです。
エラーの内容としては
①AnsiStringからPwideCharへの型キャストは見たがっている可能性があります。
②nvarsに代入された値は使われてない。
と表示されています。
以下のサイトのサンプロコードを参考にしながら書いてみました。http://delphiforfun.org/programs/delphi_techniques/LPDemo.htm
procedure Button1Click(Sender: TObject);
var
i:integer;
s:AnsiString;
nvars:integer;
colData:PFloatArray;
begin
with memo1 do
begin {delete any previous solution display}
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
begin
lp := make_lp(0,2);
set_col_name(lp, 1, 'x');
set_col_name(lp, 2, 'y');
if (lp <>0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PChar(s),1,75);
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, pchar(s)) then
begin
set_maxim(lp);
if solve(lp)=0 then
with memo1, lines do
begin
add('');
add('Solved');
add('Optimum variable values are:');
//:=get_nColumns(lp);
get_variables(lp,colData);
add(format('%s: %f', [get_col_name(lp, 1), colData^[0]]));
add(format('%s: %f', [get_col_name(lp, 2), colData^[1]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
end;
end;
end;
delete_lp(lp);
end;
回答でなくて申し訳ありませんがインデントがないため著しく可読性に欠けます。
インデントをつける癖をつけましょう。
配慮が足りず、申し訳ありませんでした。
もう一度下に書かせていただきます。
試行錯誤して自分なりに直してみたのですが、次はPAnsiCharとPWideCharに互換性がないと表示されました。何を言われているのかは理解できますが、どうすればいいのかわかりません。
procedure TFormWaypointTracker.ButtonLPClick(Sender: TObject);
var
i:integer;
s:AnsiString;
nvars:integer;
colData:PFloatArray ;
lp:THandle ;
begin
with memo1 do
begin {delete any previous solution display}
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
begin
lp := make_lp(0,2);
set_col_name(lp, 1, 'x');
set_col_name(lp, 2, 'y');
colData:=AllocMem(SizeOf(Double)*2) ;
if (lp <> 0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PAnsiChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PAnsiChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PAnsiChar(s),1,75);
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, PAnsiChar(s)) then
begin
set_maxim(lp);
if solve(lp)=0 then
with memo1, lines do
begin
add('');
add('Solved');
add('Optimum variable values are:');
nvars:=get_nColumns(lp);
get_variables(lp,@colData);
add(format('%s: %d', [get_col_name(lp, 1), colData^[i]]));
add(format('%s: %d', [get_col_name(lp, 2), colData^[1]]));
add(format('Objective value: %d', [get_objective(lp)]));
end;
end;
end;
end;
delete_lp(lp);
end;
コンパイルエラーはコピペで正確に書いたほうが適切な回答が付きやすいと思います(特に提示したコードが最小限の再現コードではない場合は)。
でちょっとだけエスパーしてみると、エラーはstr_add_constraint(...)のところで出てます?でお使いのDelphiのバージョンは2009よりも新しいものです?
だとすると、str_add_constraintの第2引数がPChar=PWideCharとして定義されているにもかかわらず、PAnsiChar(<ANSI文字列>)を渡しているからではないでしょうか。
解決策としては、ローカル変数sをAnsiStringではなくStringで定義して、str_add_constraintの第2引数に渡すときにPChar(s)とする、という感じでしょうか。
lpsolve51 のソース見れば
function str_add_constraint(lp: THandle; row_string : PChar;constr_type: integer; rh: double): boolean; stdcall; external LPSOLVELIB name 'str_add_constraint';
>PAnsiCharとPWideCharに互換性がないと表示されました
str_add_constraint(lp,PAnsiChar(s),1,15000);
row_string : PChar; の所に PAnsiChar(s) しているので
※ PChar は PWideChar
cのソースの方を見ると定義が下のようになってるのでこれにWideChar渡すのはまずそうな気がする
MYBOOL __EXPORT_TYPE __WINAPI str_add_constraint(lprec *lp, char *row_string, int constr_type, REAL rh);
ので、Delphi2009移行で使うならlpsolve51の定義でPCharとなってる部分は全部PAnsiCharに置換した方が良いのかも知れません。
皆様ありがとうございました!!
何とか下の部分は理解することが出来ました。
次の問題として、
for i:=lines.count-1 downto 0 do
の部分がfor文はローカル変数でなければいけないとエラーが出たのですが、こちらはどの部分が間違いなのでしょうか?
古いソースコードだから、Delphi10.2に対応してないと言った類の話でしょうか??
var
Form1: TForm1;
I: Integer; //警告
implementation
var
I: Integer; //警告
procedure AAAA;
var
I: Integer; //ここにしないと警告が出る
begin
for I:=0 to 99 do
>procedure TFormWaypointTracker.ButtonLPClick(Sender: TObject);
> var
> i:integer;
でも定義しているから警告出ないはずなんだけど
無事にコンパイルできました。
しかし、実行を押してもbutton"クリックしても、memoに答えが表示されませんでした。
コードの部分に何か問題があるのでしょうか??
それともbuttonとmemoを連動?させるような設定があるのでしょうか??
> しかし、実行を押してもbutton"クリックしても、memoに答えが表示されませんでした。
> with memo1 do
> begin {delete any previous solution display}
の下に
ShowMessage('1');
> if (lp <> 0) then
> begin
の下に
ShowMessage('2');
> if str_set_obj_fn(lp, PAnsiChar(s)) then
> begin
の下に
ShowMessage('3');
> if solve(lp)=0 then
> with memo1, lines do
> begin
の下に
ShowMessage('4');
をそれぞれ追加して、コンパイル&実行し、クリックしたら、メッセージは表示されますか?
はい!メッセージは表示されます。
しかし、用意したmemoにではなく、勝手に別のが表示されました!
説明できなくてごめんなさい。
説明不足でごめんなさいm(_ _)m
Formにはbuttonとmemoを設計して、buttonをクリックしたら上記の計算の答えがmemoに表示されるのをイメージしていたのですが、可能でしょうか??
>用意したmemoにではなく、勝手に別のが
“用意したmemo”と“別の”が、
主 さん以外の人には、わからないかと思います。
挙げられたコードでは、memo1 に格納しているようなのですが・・・
言語化できなくて申し訳ありません。
用意したmemoに表示されるのではなくて、HelloWorldのように新しいのが表示されました、
> HelloWorldのように新しいのが表示されました、
ボタンをクリックしたら、
MessageBoxが4回(1~4まで)表示後、Memo1には“HelloWorld”が格納されるのですか?
私が言いたかったのはMessageBoxです。知識足らずで申し訳ありませんでした。
MessageBoxで1-4まで表示された後に、buttonをクリックしたら、再びMessageBOXで0.1と表示されました。
memoには何も表示されませんでした。
想定されている動作としては、フォーム上に置いたMemo1に、(igyさんの指示による追加の後では”4”までメッセージボックスが表示されてそれぞれOKボタンをクリックした後に)
---
Solved
Optimum variable values are:
...(解析結果)
Objective value: ...
---
と表示されるはずが、何も表示されない、ということですね?
2022-09-21 11:40:59 No: 150451で提示されたソースコードはDelphiのIDEからのコピペですか?
もしそうでないなら、もう一度、現状のソースコードをコピペで提示してもらえますか?
> add(format('%s: %d', [get_col_name(lp, 1), colData^[i]]));
> add(format('%s: %d', [get_col_name(lp, 2), colData^[1]]));
> add(format('Objective value: %d', [get_objective(lp)]));
こうじゃない?
for I:=0 to Nvars - 1 do
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
HFUKUSHI様
想定していることはHFUKUSHI 様の仰る通りです。
線形計画を解けるか確認したいだけなので、この際ボタンを使用しなくても構わないのです。解けるかの結果だけでも知りたいのですが、可能でしょうか。
上記のコードはコピペしたものになりますが、一応現在のコードを再度下記に記します。
procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
s:String;
nvars:integer;
colData:PFloatArray ;
lp:THandle ;
begin
with Memo1 do
begin
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
begin
lp := make_lp(0,2);
set_col_name(lp, 1, 'x');
set_col_name(lp, 2, 'y');
colData:=AllocMem(SizeOf(Double)*2) ;
if (lp <> 0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PChar(s),1,75);
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, PChar(s)) then
begin
set_maxim(lp);
if solve(lp)=0 then
with memo1, lines do
begin
add('');
add('Solved');
add('Optimum variable values are:');
nvars:=get_nColumns(lp);
get_variables(lp,@colData);
add(format('%s: %d', [get_col_name(lp, 1), colData^[i]]));
add(format('%s: %d', [get_col_name(lp, 2), colData^[1]]));
add(format('Objective value: %d', [get_objective(lp)]));
for I:=0 to Nvars - 1 do
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
end;
end;
end;
end;
delete_lp(lp);
end;
end.
オブジェクト インスペクタの設定の問題でしょうか??
イベントのOnClickは、ButtonとMemoともにButton1Clickに設定しているのですが、この辺の設定で上手く連動していない場合はありますでしょうか??
① PChar を PAnsiChar にしてない (lpsolve51 内もすべて PAnsiChar にかえる)
② s:String; は S: AnsiString
③ get_variables(lp,@colData); は get_variables(lp,colData);
④
for I:=0 to Nvars - 1 do
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
にかえたのに
add(format('%s: %d', [get_col_name(lp, 1), colData^[i]]));
add(format('%s: %d', [get_col_name(lp, 2), colData^[1]]));
add(format('Objective value: %d', [get_objective(lp)]));
消してない
AAAAA様 回答ありがとうございます。
アドバイス通りに直したらエラーが発生してしまいました。
s:= '120' + ' ' + '210';
str_add_constraint(lp,PChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PChar(s),1,75);
s:= '143' + ' ' + '60';
上記の部分に[dcc32 エラー] lp.rennshuu.pas(62): E2010 'PWideChar' と 'PAnsiChar' には互換性がありません とエラーが出ました。
なんで PChar なんだよ
コピペする部分を間違えました。
s:= '120' + ' ' + '210';
str_add_constraint(lp,PAnsiChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PAnsiChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PAnsiChar(s),1,75);
s:= '143' + ' ' + '60';
の部分です
上記の部分に[dcc32 エラー] lp.rennshuu.pas(62): E2010 'PWideChar' と 'PAnsiChar' には互換性がありません とエラーが出ました。
出るってことは
(lpsolve51 内もすべて PAnsiChar にかえる)をやってないだろ
現在のコードです↓
procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
s:AnsiString;
nvars:integer;
colData:PFloatArray ;
lp:THandle ;
begin
with Memo1 do
begin
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
begin
lp := make_lp(0,2);
set_col_name(lp, 1, 'x');
set_col_name(lp, 2, 'y');
colData:=AllocMem(SizeOf(Double)*2) ;
if (lp <> 0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PAnsiChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PAnsiChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PAnsiChar(s),1,75);
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, PAnsiChar(s)) then
begin
set_maxim(lp);
if solve(lp)=0 then
with memo1, lines do
begin
add('');
add('Solved');
add('Optimum variable values are:');
nvars:=get_nColumns(lp);
get_variables(lp,colData);
for i:=0 to nvars-1 do {display variable values}
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
end;
end;
end;
end;
end;
delete_lp(lp);
end.
無知で申し訳ありませんでした。
コンパイルはできたのですが、実行したら以下のデバッガ例外通知が出ました。
プロジェクト lp.dennshuu.exe は例外クラス $C00000FD (メッセージ 'stack overflow at 0x00dbe0eb')を送出しました。
lpsolve51.pas
function str_add_constraint(lp: THandle; row_string : PChar;constr_type: integer; rh: double): boolean; stdcall; external LPSOLVELIB name 'str_add_constraint';
⇩
function str_add_constraint(lp: THandle; row_string : PAnsiChar;constr_type: integer; rh: double): boolean; stdcall; external LPSOLVELIB name 'str_add_constraint';
PChar は PWideChar なので PWideChar と PAnsiChar は互換が無いと言われる
PChar は全部 PAnsiChar に変更する
(※) LPDemo2.exe のアイコンから 元は DELPHI 7 で作ったみたいで
DELPHI 7 は PChar は PAnsiChar
最近(どっからか忘れた) は PChar は PWideChar
あと、こちらの例外通知も発生してしまいました。
プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました。
delete_lp(lp); の場所がおかしいのを移動させれば動くけど?
Solved
Optimum variable values are:
x = 21.875
Objective value: 6315.63
y = 53.125
Objective value: 6315.63
ホントですか???
delete_lp(lp); はどちらに移動させればよいのでしょうか??
最後の end; と end. の間にあるっておかしいだろ?
宣言が必要な場所に識別子delete_lpがありますって出るはずなんだけど
はい、、でました。
理解はできてないですけど、一個ずつ動かして確認してみます。
procedure TForm1.Button1Click(Sender: TObject);
var
begin
end;
delete_lp(lp);
end.
コンパイル通るはずなんだけど ソース抜き出して貼り付けてないか?
通るはずないんだけど
はい。LPDemo2.exe のSolveButtonClickの部分を参考にしていたので、使えそうな部分はコピペしました。
LPDemo2 実行すると文字化けすると思うけど
U_LPDemo2 と lpsolve51 両方 PChar -> PAnsiChar 変えて実行すれば正常に表示されるよ
delete_lp(lp);
はないと困るものなのですか??
>はい。LPDemo2.exe のSolveButtonClickの部分を参考にしていたので、使えそうな部分はコピペしました。
そうじゃない
>プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました。
が出るっていってるけど
end;
delete_lp(lp);
end.
の時点でコンパイルが通らないので実行できるわけない。
現在のコードです↓ といってるが
>プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました。
でたときのソースでは無いということになるの
>プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました。
が出たときのソースをのせなきゃ判断できんでしょ
delete_lp(lp);
はないと困るものなのですか??
lp := make_lp(0,2);
で確保したメモリを解放してるんだろうけど
colData:=AllocMem(SizeOf(Double)*2) ;
のメモリも解放してないみたいだけど
なければ
解放しないだけ
AAAAA様
親身になって相談に乗っていただきありがとうございます。研究室には相談に乗ってもらえる人もいなくて途方に暮れていました。
ここまで優しく最後まで面倒を見て頂けて本当に嬉しいです!!
現在のコードです↓
procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
s:AnsiString;
nvars:integer;
colData:PFloatArray ;
lp:THandle ;
begin
with Memo1 do
begin
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
begin
lp := make_lp(0,2);
set_col_name(lp, 1, 'x');
set_col_name(lp, 2, 'y');
colData:=AllocMem(SizeOf(Double)*2) ;
if (lp <> 0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PAnsiChar(s),1,15000);
s:= '110' + ' ' + '30';
str_add_constraint(lp,PAnsiChar(s),1,4000);
s:= '1' + ' ' + '1';
str_add_constraint(lp,PAnsiChar(s),1,75);
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, PAnsiChar(s)) then
begin
set_maxim(lp);
if solve(lp)=0 then
with memo1, lines do
begin
add('');
add('Solved');
add('Optimum variable values are:');
nvars:=get_nColumns(lp);
get_variables(lp,colData);
for i:=0 to nvars-1 do {display variable values}
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
add(format('Objective value: %f', [get_objective(lp)]));
end;
end;
end;
end;
end;
delete_lp(lp);
end;
end.
これで実行すると
一つ目の例外通知に
プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました
そのまま続行をすると、二つ目の例外通知に
プロジェクト lp.dennshuu.exe は例外クラス $C0000005 (メッセージ 'access violation at 0x76ad62c5: write of address 0x01200e90')を送出しました
と表示されました。
一つ目はこっちでした
プロジェクト lp.dennshuu.exe は例外クラス $C00000FD (メッセージ 'stack overflow at 0x00dbe0eb')を送出しました。
例外でないんだよね
画面にはどこまで表示されている?
ところで LPDemo2.exe は正常に動作するんだよね?
サイトからダウンロードしたのですが、開こうとすると
ファイルC:¥WINDOWS¥System32¥LPDemo2は開けません。指定されたファイルが見つかりません。
と表示されます。
何かの設定ができていないのでしょうか??
Delphi自体インストールしたばっかりなので、初期設定のままなのですが、、、
http://delphiforfun.org/programs/Download/LPDemoSource.zip
をダウンロードして
LPDemoSource.zipを
....\Embarcadero\Studio\Projects\適当なフォルダ
に解凍
>ファイルC:¥WINDOWS¥System32¥LPDemo2は開けません。指定されたファイルが見つかりません。
なんで System32 なんだよ・・・・
System32は間違っているのですか?
64に変えるという子でしょうか?よろしければ変更の仕方も教えて頂きたいです。
AAAAA様
言われた通りにZipの解凍?をしてから開いたらできました。実行までできました!!!
ダウンロードしたファイルがC:¥WINDOWS¥System32にあるってことはないだろ・・・・
ドライブ:\Users\ユーザー名\Downloads
(エキスプローラーのクイックアクセスのダウンロード)
に LPDemoSource.zip ないか?
>はい。LPDemo2.exe のSolveButtonClickの部分を参考にしていたので、使えそうな部分はコピペしました。
これどうやって手に入れた?
No.150539に関してはプロジェクトファイルは開けなくても、pas.は開けたのでそこから手に入れました。
しかし、AAAAA様の助言のおかげでLPDemo2.exeは開くことができ、実行もでき、実際に計算結果も表示できていました。
次は私が書いたコードの方なのですが、こちらも...\Embarcadero\Studio\Projects\適当なフォルダに入れたらできたりしますかね??
procedure TForm1.Button4Click(Sender: TObject);
var
i:integer;
s:AnsiString;
nvars:integer;
colData:PFloatArray ;
lp:THandle ;
procedure ADD(TEXT: String);
begin
Memo1.Lines.Add(TEXT);
end;
begin
with Memo1 do
begin
for i:=lines.count-1 downto 0 do
begin
if (length(lines[i])>=2) and (copy(lines[i],1,2)= '--')
then break
else lines.delete(i);
end;
end;
lp := make_lp(0,2); //**********
ADD('#1');
set_col_name(lp, 1, 'x');
ADD('#21'); //**********
set_col_name(lp, 2, 'y');
ADD('#22'); //**********
if (lp <> 0) then
begin
s:= '120' + ' ' + '210';
str_add_constraint(lp,PAnsiChar(s),1,15000);
ADD('#31'); //**********
s:= '110' + ' ' + '30';
str_add_constraint(lp,PAnsiChar(s),1,4000);
ADD('#32'); //**********
s:= '1' + ' ' + '1';
str_add_constraint(lp,PAnsiChar(s),1,75);
ADD('#33'); //**********
s:= '143' + ' ' + '60';
if str_set_obj_fn(lp, PAnsiChar(s)) then
begin
ADD('#4'); //**********
set_maxim(lp);
ADD('#5'); //**********
if solve(lp)=0 then
begin
ADD('#6'); //**********
add('');
add('Solved');
add('Optimum variable values are:');
nvars:=get_nColumns(lp);
ADD('#7'); //**********
colData:=AllocMem(SizeOf(Double)*2) ;
get_variables(lp,colData);
ADD('#8'); //**********
for i:=0 to nvars-1 do {display variable values}
begin
add(format('%s = %.3f',[get_col_name(lp,i+1),colData[i]]));
ADD('#91'); //**********
add(format('Objective value: %f', [get_objective(lp)]));
ADD('#92'); //**********
end;
FreeMem(colData);
end;
end;
end;
delete_lp(lp);
ADD('#10'); //**********
end;
で例外でるとき Memo にどこまで表示されている?
今すぐやってみます!!
新しくプロジェクト作った方が良いですよね!
コンパイルは出来たのですが、実行するとシステムエラーが発生しました。
lpsolve51.dllが見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する場合があります。
lpsolve.dllはプロジェクトと同じファイルに入れておけば良いんですよね??
また、このdllはLPDemoのzipに入っていたものですよね!
そう
同じファイルに入れても出てこないのですが、このdllもPCharとPAnsiCharで入れ替えなきゃとかはありますか??
..\Embarcadero\Studio\Projects\適当なフォルダに、作成したプロジェクトを保存したのに、dllが見つからないとエラーが出てしまいます。
付属している lpsolve51.dll は、32ビット用なのでEXEも32ビット用で作る必要がある。
初期値は多分64ビット用EXEだと思うので、コンパイルオプションを変える必要あるのでは?
設定方法は他の方、ヘルプ!。 LazarusならわかるんだがDelphiはわからん。
..\Embarcadero\Studio\Projects\適当なフォルダ
lpsolve51.pas コピー( PChar -> PAnsiChar にかえる) というかいままで使ってたのコピーでも良い
..\Embarcadero\Studio\Projects\適当なフォルダ\win32\debug (EXEが作られるところ) (Releaseかも)
lpsolve51.dll をコピー
AAAAAさん!!!!
できました!!!
Embarcadero\Studio\Projects\適当なフォルダ\win32\debug (EXEが作られるところ) (Releaseかも)
lpsolve51.dll をコピー
これをしたらできました!!
Memoに#10まで表示されました!!
本当にありがとうございましたm(_ _)mm(_ _)mm(_ _)m
直接お礼をさせていただきたいぐらい嬉しいです!!
まだ卒業研究のスタートラインに立ったばかりなのですが、これから頑張ります!!また何か疑問が生じたら、掲示板に来るかもしれないのでよろしくお願いしますm(_ _)m
本当にお世話になりました!!!
AAAAA様大好きです!!!
しかし、なぜ..\Embarcadero\Studio\Projects\適当なフォルダ\win32\debugにlpsolve51.dllを保存しただけで動いたのでしょうか??
DLL は PATH の通ってる場所か EXE のある場所にないとダメなの
同じファイルに全部突っ込んどけばいいのかと思ってました。。
これからDelphiを使う時は、debugの部分を気をつけて見るようにします。
本当にに長い時間かけて教えて頂きありがとうございました!!
ツイート | ![]() |