やりたいこと
他者が作った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
回答1件
あなたの回答
tips
プレビュー