Hi,

I wish to answer myself because I found the solution. Thanks to Jeff for the 
idea of sharing only the variable in the preferences. I give here what I did, 
hoping it can be useful for somebody (maybe it can be put in a README or 
somewhere else). It was tested with MSVC++2008EE, with the two plugins like 
indicated in a previous mail in copy below. The aim was to share preferences 
defined in a plugin in order to be used by another plugin.

In the main plugin (called plugin1, the one that contains the preferences 
definition), the variable(s) that store the preference (range, UAT) must be 
declared directly in the C-code (i.e. packet-plugin1.c, header is not 
necessary) with the prefix __declspec(dllexport). For example, with a range of 
UDP ports:

__declspec(dllexport) range_t *bite_udp_range;

Then plugin1 can be compiled. The files packet-plugin1.obj and plugin1.lib must 
be copied into the directory of plugin2.
In packet-plugin2.c, declare the same variable with the prefix 
__declspec(dllimport). Following the same example, we have:

__declspec(dllexport) range_t *bite_udp_range;

The last step is to modify the Makefile.nmake of plugin2 directory as follow 
(adding files of plugin1 in the 2nd line):


$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) 
$(LINK_PLUGIN_WITH) $(RESOURCE)
    link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) packet-plugin1.obj 
$(LINK_PLUGIN_WITH) plugin1.lib\
    $(GLIB_LIBS) $(RESOURCE)


Plugin2 can be compiled. I tried it only with a range_t but I'll try it in few 
weeks with an entire UAT table. This probably works only for Windows because 
"__declspec(dllexport)" is Windows-specific.

Thanks everyone for your help!

Yvan



________________________________
De : Jeff Morriss <[email protected]>
À : Developer support list for Wireshark <[email protected]>
Envoyé le : Jeudi, 23 Avril 2009, 17h50mn 36s
Objet : Re: [Wireshark-dev] Tr : Dissector preferences reuse



[email protected] wrote:

> I 'm working on 2 plugin dissectors, and I wish to know if it's possible 
> (and if yes, how) to reuse preferences from one plugin to another. I 
> need to reuse only a part of the preferences (which is an UAT table, so 
> pretty long and boring to define) from plugin1 to plugin2, considering 
> that protocol2 is included in plugin1 like this:
> plugin1
>     IP struct
>         UDP struct
>             plugin2
> Can the copy_prefs() function be useful? How must I define the 
> preferences in plugin1 to divide it in 2 parts? How to integrate a 
> separated part into preferences of plugin2?

Well, the plugins could simply share the variable that stores the 
preference.  Basically: make the variable not 'static' (so it is visible 
to other modules), put it in a header file (properly 'extern'd), and 
have both plugins include the header file and use the variable.

For an example, see the mtp3_standard preference in packet-mtp3.{h,c}.

Note: I know this works for regular dissectors but I don't know if the 
rules are different for plugins--especially on Windows.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe



      
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to