• ベストアンサー

DLLの使用時トラブルについて

redfox63の回答

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

# お使いの開発環境の情報も明記しましょう お使いの環境が VB6(またはVBA)などであれば --- sample.frm Sub Form_Load() ' Sample End Sub declare Function myFunc Lib "myFunc.dll" (ByVal nInt as Integer) as Long といったコードでは質問のようなエラーになるでしょう --- sample.frm Declare Function myFunc Lib "myFunc.dll" (ByVal nInt as Integer) as Long Sub Form_Load() ' Sample End Sub といった具合にコードの冒頭にDLL用の関数宣言などを移動してみましょう

nosense
質問者

お礼

お礼が遅くなり申し訳ありません。 サンプルコードまで記載いただきご回答ありがとうございます。 使用環境の記載不足は誠に申し訳ありません。 使用言語はエクセルVBAです。 2番目のサンプルコードは記載してみましたがダメでした。 ちなみに、その記載はアリなんでしょうか? プログラムの開始は、Sub()~開始という思い込みがありまして。 グローバル変数の定義付けみたいな解釈で理解すればよいのでしょうか?

関連するQ&A

  • シンボルをエクスポートするDLLの初歩的トラブル

    VC++6.0で簡単なDLL作成にチャレンジしたところ、ソースファイルの最後のところで、エンドオブファイルのエラーが出ます。教本と同じように書いたつもりですが、何処が異なっているのか分かりません。エラーを出す原因となっている箇所を御指摘下さい。 ↓ソースファイル #include "stdafx.h" #include "SUB.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } SUB_API LONG _stdcall subtract( LONG sub1 , LONG sub2 ) { return( sub1 - sub2 ); } ↓ここからはヘッダーファイル #ifdef SUB_EXPORTS #define SUB_API __declspec(dllexport) #else #define SUB_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif SUB_API LONG __stdcall subtract( LONG sub1, LONG sub2 ); #ifdef _cplusplus } #endif --------------------構成: SUB - Win32 Debug-------------------- コンパイル中... StdAfx.cpp コンパイル中... SUB.cpp C:\Program Files\Microsoft Visual Studio\MyProjects\SUB\SUB.cpp(38) : error C2059: 構文エラー : 'end of file' cl.exe の実行エラー SUB.dll - エラー 1、警告 0

  • [c++]#using "user32.dll"でエラー

    VC++ 2008 Express Editionを使用しています。 ソースコード上に#using "user32.dll"を記述したところ 「 fatal error C1113: #using が 'c:\windows\servicepackfiles\i386\user32.dll' で失敗しました。」というエラーが出てしまいコンパイルできません。#using <mscorlib.dll>を記述した場合はコンパイルできます。 どうしたら#using "user32.dll"を使えるようになりますか?なおuser32.dllはちゃんと存在します。

  • VB.NETでDLL関数を呼び出すには

    VB.NETでDLLの関数を呼び出す時に、 NewではなくCreateObject()を使って呼び出すには、 どのように記述をすればよいのでしょうか。 具体的には、 ソリューション名 ClassLibrary1で ---------------------------------- Imports System.Windows.Forms Public Class Class1 Public Sub test() MessageBox.Show("テスト") End Sub End Class ---------------------------------- のコードをビルドしてClassLibrary1.dllを生成して、 ソリューション名 ConsoleApp1で ---------------------------------- Imports ClassLibrary1 Module Module1 Sub Main() Dim obj As Class1 obj = New Class1() 'obj = CreateObject("Class1") obj.test() End Sub End Module ---------------------------------- のコードをビルドして実行すると、 正しく実行できますが、 obj = New Class1() を obj = CreateObject("Class1") のようにすると図のようなエラーになります。 Newではなく、CreateObject()を使ってDLLを呼び出すには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。 (Windows10)(Visual Studio 2022)

  • エクセルでマクロを実行するとコンパイルエラー

    エクセルでVBエディタでソースコードを記述し、マクロを実行すると、コンパイルエラー、「SubまたはFunctionが定義されていません」とエラーが出ます。これはどういうエラーですか?何が間違っているのですか?

  • IronPython でのDLL の使用について

    Visual Basic 2010 でDLLを作成し,IronPython 2.6 で使用したいのですがエラーが出て動きません。 何かアドバイスがありましたらお願いします。 ・DLLの作成 Visual Basic の新規プロジェクトを”クラスライブラリ”として作成 (.NET Framework 2.0) Public Class aaa Public Sub bbb() MsgBox("AAA") End Sub End Class ・IronPython での呼び出し側 import os import clr import sys clr.AddReferenceByPartialName("Microsoft.VisualBasic") from Microsoft.VisualBasic import Interaction sys.path.append(os.path.dirname(os.path.abspath(__file__))) clr.AddReferenceToFile("test_VB.dll") import test_VB aa = test_VB.aaa aa.bbb() 実行すると, TypeError: bbb() takes exactly 1 argument (0 given) となってしまいます。 bbb()定義時には何も引数を指定していないのですが, 何を渡せばいいでしょうか? よろしくお願いします。

  • アクセス ステータスバーの文字を表示させたい

    エクセルなら、 Sub Sample01() Application.StatusBar = True Application.StatusBar = "あああ" End Sub で、左下に文字を表示させられますが、 同じコードをアクセスで実行すると、「StatusBar 」の部分が、コンパイルエラーになります。 なので、 Sub Sample02() DoCmd.StatusBar = True DoCmd.StatusBar = "あああ" End Sub として見ましたが、結果は同じでした。

  • 実行時エラー’1004’

    初心者です。EXCEL VBA 音声出力機能を利用したいのですが、以下の プログラムコードで、アプリケーション定義またはオブジェクト定義 のエラーです とでてしまいました。不具合をどうぞ教えていただけ ないでしょうか。おねがいします。   Sub 読み上げ() Range("B2").Speak SpeakDirection:=xlSpeakByColumns,_ SpeakFormulas:=False End Sub

  • DLLの利用について

    現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa, bb) Private Sub Command1_Click() Dim a(9) As Integer  '1~9の値の代入先 Dim b As integer   '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b  'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum

  • DLLの利用について

    現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa as Integer, bb as Integer) Private Sub Command1_Click() Dim a(9) As Integer  '1~9の値の代入先 Dim b As integer   '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b  'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum

  • VBで使用できるDLL(SSL通信)をVC++で作成する。

    VBで使用できるDLLをVC++で作成しました。 内容は、SSL転送をWindowsで行うためのDLLです。 DLLではなくexeで作成したときはDOS窓からうまく動いたのですが、 DLLで作成をして、VBから呼んだときにエラーメッセージがでてプログラムは実行されません。 エラーメッセージは、 実行時エラー'53': ファイルが見つかりません:dll-file-name です。 エラーにはいろいろな要素があると思うのですが、 このエラーが出るか出ないかは、関数の中のSSL通信のプログラムを書くと このエラーがでます。 例>SSLeay_add_ssl_algorithms(); SSL通信の記述がなければ正常に実行されるので、この部分だけだと思うの ですが、特別な設定、記述があれば教えてください。 よろしくお願いします。