質問編集履歴

3

業務内容漏洩リスクの対応。

2023/09/29 06:43

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,86 +1,7 @@
1
- ### 実現したいこと
1
+ ### 2023年9月29日 修正
2
+ 業務内容漏洩リスクを指摘されたため、質問の内容を伏せさせていただきます。
3
+ 協力していただいた方々、大変申し訳ありません。
2
4
 
3
- VB6からDLLを呼び出してメール送信を実行していました。
4
- すが、そDLL内動作仕様を変える必要が出てきまし
5
+ 動作はきたもののまだテストはていない状況です
6
+ テストが通り世に出回りましたら、ブログなど何らかの方法で公開させていただきます。
5
7
 
6
- VB6はソースコードは残っているもののサードパーティモジュールが既に存在せず、開発環境を作成することができないため、VB6側は変更できません。
7
-
8
- DLL入れ替えのみによって実現したく、C#.NETにてDLLを作成してみたのですが、VB6側からの呼び出しができません。
9
-
10
-
11
- ### VB6
12
- VB6側の定義は、このようにして、smtpmail.dllを呼び出しています。
13
- ```
14
- 'メール送信関数定義
15
- Private Declare Function SendMail Lib "smtpmail" _
16
- (sServer As String, sTo As String, sFrom As String, _
17
- sSubject As String, sBody As String, sFile As String) As String
18
- ```
19
-
20
- ### C#
21
- 下記のように実装し、.net4.7.2互換、プロジェクトは「COM相互運用機能の登録」にチェックを入れています。
22
- ```
23
- using System;
24
- using System.Threading.Tasks;
25
- using MimeKit;
26
- using MimeKit.Text;
27
- using MailKit.Net.Smtp;
28
- using MailKit.Security;
29
- using System.Runtime.InteropServices;
30
- using System.Security.Cryptography.X509Certificates;
31
- using System.Net.Security;
32
-
33
- [Guid("XXXXXX-XXXXX-XXXXX-XXXX-XXXXXXX")]
34
- [InterfaceType(ComInterfaceType.InterfaceIsDual)]
35
- public interface Ismtpmail
36
- {
37
- string SendMail(
38
- string szServer, string szTo, string szFrom,
39
- string szSubject, string szBody, string szFile);
40
- }
41
-
42
-
43
- [Guid("XXXXXX-XXXXX-XXXXX-XXXX-XXXXXXX")] // 一意のGUIDを指定します
44
- [ComVisible(true)] // COM相互運用を有効にする
45
- [ClassInterface(ClassInterfaceType.None)]
46
- [ComDefaultInterface(typeof(Ismtpmail))]
47
- public class Smtpmail : Ismtpmail
48
- {
49
- // VB6から呼び出す関数の宣言
50
- public string SendMail(
51
- string szServer, string szTo, string szFrom,
52
- string szSubject, string szBody, string szFile)
53
- {
54
-
55
- ```
56
- x86指定でビルドし
57
- dll作成後に、COMオブジェクトを登録しました。
58
- ```
59
- regasm /codebase Smtpmail.dll
60
- ```
61
- ### 現在の状況
62
-
63
- smtpmail.dllを消してみました。
64
- VB6を実行すると、smtpmailが見つかりません、とエラーになりました。
65
-
66
- smtpmail.dllを配置しました。
67
- 再びVB6を実行すると、SendmailがDLL smtpmail内に見つかりません、とエラーになりました。
68
-
69
- VB6からdllは認識できているようですが、関数が認識できていないようです。
70
-
71
- ```
72
- C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\SDK\ScopeCppSDK\vc15\VC\bin>dumpbin /exports smtpmail.dll
73
- Microsoft (R) COFF/PE Dumper Version 14.12.25835.0
74
- Copyright (C) Microsoft Corporation. All rights reserved.
75
-
76
-
77
- Dump of file smtpmail.dll
78
-
79
- File Type: DLL
80
-
81
- Summary
82
-
83
- 2000 .reloc
84
- 2000 .rsrc
85
- 2000 .text
86
- ```

2

dumpbinコマンドのパスを追記しました。

2023/09/21 05:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -69,7 +69,7 @@
69
69
  VB6からdllは認識できているようですが、関数が認識できていないようです。
70
70
 
71
71
  ```
72
- dumpbin /exports smtpmail.dll
72
+ C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\SDK\ScopeCppSDK\vc15\VC\bin>dumpbin /exports smtpmail.dll
73
73
  Microsoft (R) COFF/PE Dumper Version 14.12.25835.0
74
74
  Copyright (C) Microsoft Corporation. All rights reserved.
75
75
 

1

C#のコードを、アドバイスされた参照サイトで手直ししました。

2023/09/21 05:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -30,18 +30,30 @@
30
30
  using System.Security.Cryptography.X509Certificates;
31
31
  using System.Net.Security;
32
32
 
33
+ [Guid("XXXXXX-XXXXX-XXXXX-XXXX-XXXXXXX")]
34
+ [InterfaceType(ComInterfaceType.InterfaceIsDual)]
35
+ public interface Ismtpmail
36
+ {
37
+ string SendMail(
38
+ string szServer, string szTo, string szFrom,
39
+ string szSubject, string szBody, string szFile);
40
+ }
41
+
42
+
43
+ [Guid("XXXXXX-XXXXX-XXXXX-XXXX-XXXXXXX")] // 一意のGUIDを指定します
33
- [ComVisible(true)] // COM相互運用を有効にする
44
+ [ComVisible(true)] // COM相互運用を有効にする
34
- [Guid("XXXXXX-XXXXX-XXXXX-XXXX-XXXXXXX")] /
45
+ [ClassInterface(ClassInterfaceType.None)]
46
+ [ComDefaultInterface(typeof(Ismtpmail))]
35
- public class Smtpmail
47
+ public class Smtpmail : Ismtpmail
36
- {
48
+ {
37
49
  // VB6から呼び出す関数の宣言
38
- [ComVisible(true)]
39
50
  public string SendMail(
40
- string sServer, string sTo, string sFrom,
51
+ string szServer, string szTo, string szFrom,
41
- string sSubject, string sBody, string sFile)
52
+ string szSubject, string szBody, string szFile)
42
53
  {
54
+
43
55
  ```
44
-
56
+ x86指定でビルドし
45
57
  dll作成後に、COMオブジェクトを登録しました。
46
58
  ```
47
59
  regasm /codebase Smtpmail.dll