Bonjour,

J'ai créé un service Windows qui enregistre une interface COM. L'interface est correctement enregistrée et visible dans dcomcnfg.exe.

Lorsque j'appel l'interface COM depuis VB, cela fonctionne.
Lorsque j'appel l'interface com en C# en utilisant le bout de code ci-dessous, cela fonctionne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Type type = Type.GetTypeFromProgID("bkopapi.CBkopapiServerClass");
Object obj = Activator.CreateInstance(type);
object[] funcargs = new object[1];
funcargs[0] = "test";
String Ret = (String)type.InvokeMember("GetDateTime",
                 System.Reflection.BindingFlags.InvokeMethod,
                 null,
                 obj,
                 funcargs);
Par contre, lorsque j'utilise le code suivant, cela ne fonctionne pas. J'ai une erreur lorsque je cast l'objet en interface. L'erreur indique la la fonction QueryInterface à retournée l'erreur E_NOINTERFACE. Il me semble pourtant que c'est lma meilleure méthode pour appeler un objet COM en c#.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    [ComVisible(true),
     ComImport,
     Guid("F649AE66-53F2-4080-B942-3693EE0ADF71"),
     InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IBkopapiServer
    {
        string GetDateTime(string prefix);
        string listall(string user, string search, ref string response);
    }
    [ComImport, Guid("FF637577-6057-4807-95B3-4A6C69575656")]
    public class CBkopapiServer
    {
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            // Test non OK
            CBkopapiServer c = new CBkopapiServer();
            IBkopapiServer _apiserver = (IBkopapiServer)c; // Erreur E_NOINTERFACE ici
            String Result = _apiserver.GetDateTime("Test");
        }
    }
Quelqu'un peut-il m'aider ?

Merci