• ベストアンサー

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

うぃず(@Wizard_Zero)の回答

回答No.2

環境が分かりませんが、マクロとのことなのでExcel VBAと推測し、それを前提に回答します。 DLLがなければ「ファイルが見つかりません」というエラーになります。ただし、コンパイル時ではなく、その関数を使用したタイミングで表示されます。 Declare宣言を他のSub~End SubやFunction~End Functionのあとに記述したら、ご質問のエラーメッセージが表示されました。Declare宣言をコードの先頭以外に書いていないか確認してみてください。 > 実際には、サンプルコードがあるので書き写しなのですが 各箇所のコードがあっていても、記述する順序が異なればエラーが発生する可能性があります。

nosense
質問者

お礼

お礼が遅くなり申し訳ありません。 丁寧なご回答ありがとうございます。 環境は、ご推測のとおりエクセルVBAです。(説明不足ですみません) Sub~End 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通信の記述がなければ正常に実行されるので、この部分だけだと思うの ですが、特別な設定、記述があれば教えてください。 よろしくお願いします。