質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3628閲覧

DLLを読み込んだDLLを作成する方法

obokado

総合スコア14

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/29 07:05

編集2019/06/03 01:23

やりたいこと

他者が作ったDLLファイルAをimportした 自作DLLファイルBを作りたい。
自作DLLファイルBをC#で読み込みたい。

他者が作ったDLLファイルAの関数の戻り値に気に食わないもの※がある。
ため、DLLファイルBで戻り値を変換しする役割。
※文字列中に数字(4Byte)が組み込まれている。

現象

C#で読み込むとエントリーポイントが見つかりませんと出る。

下記は抜粋したソースコード(抜粋する時にミスがるかもしれません)

cpp

1//DLLファイルA = A.dll 2//DLLファイルB = B.dll 3 4extern "C" __declspec(dllexport)BOOL WINAPI _OpenDll(WORD no) 5{ 6 typedef BOOL (*WINAPI OpenDll)(WORD no); 7 8 HINSTANCE hDllInstance = ::LoadLibrary((LPCWSTR)"A.dll");//DLLを指定 9 10 OpenDll openDll = (OpenDll)::GetProcAddress(hDllInstance, "OpenDll"); bool result = openDll(no); 11 12 FreeLibrary(hDllInstance);//開放 13 14 return result; 15}

h

1#pragma once 2extern "C" __declspec(dllimport) BOOL WINAPI _OpenDll(WORD no);

def

1LIBRARY B 2EXPORTS 3 _OpenDll @1

cs

1public class C{ 2 [DllImport("B.dll")] 3 private static extern bool _OpenDLL(uint CircuitNo); 4 public C(){ 5 _OpenDLL(0); //エントリーポイントが見つかりません。 6 } 7}

###これだとできる
A.dllを読み込むことはできる。

cs

1public class C{ 2 [DllImport("A.dll")] 3 private static extern bool OpenDLL(uint CircuitNo); 4 public C(){ 5 _OpenDLL(0); //エントリーポイントが見つかりません。 6 } 7}

CommandPrompt

1*****>dumpbin /exports B.dll 2rts B.dll 3Microsoft (R) COFF/PE Dumper Version 14.16.27031.1 4Copyright (C) Microsoft Corporation. All rights reserved. 5 6 7Dump of file B.dll 8 9File Type: DLL 10 11 Section contains the following exports for B.dll 12 13 00000000 characteristics 14 FFFFFFFF time date stamp 15 0.00 version 16 1 ordinal base 17 7 number of functions 18 7 number of names 19 20 ordinal hint RVA name 21 (抜粋) 22 2 3 00011168 _CloseDll = @ILT+355(__CloseDll@4) 23 1 4 0001129E _OpenDll = @ILT+665(__OpenDll@4) 24 (抜粋) 25 Summary 26 27 1000 .00cfg 28 1000 .data 29 1000 .idata 30 1000 .msvcjmc 31 2000 .rdata 32 1000 .reloc 33 1000 .rsrc 34 6000 .text 35 10000 .textbss

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asm

2019/05/29 08:11

> __declspec(dllexport)BOOL WINAPI _OpenDll > private static extern bool _OpenDLL(uint CircuitNo); 関数名が違いますが、投稿時のミスでしょうか?
obokado

2019/05/30 00:39

投稿時のミスです。 ご指摘ありがとうございます。 修正させていただきました。
yominet

2019/05/30 12:23

一旦、A.dllを置いといて 「自作のDLLをC#から呼び出す」 は成功していますか?
Q71

2019/06/01 01:35

_ ではなく、後ろに Ex をつける、とかだとどうですか?
obokado

2019/06/03 01:07

私もそれかと思い、後ろではなく前にexを付けてやってみましたが同じ結果でした。
guest

回答1

0

自己解決

yominetさんが言っていた通り、"_OpenDLL"と"_OpenDll"が間違っておりました。
修正したところその部分は通過しました。

ありがとうございました。

投稿2019/06/03 01:26

obokado

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問