Don't kill yourself trying to become an expert at data marshaling when you don't need to be one.
Create a new VB.NET assembly (say "Types") and put all your data structures there.
Add a reference to this assembly in both the native and existing VB.NET projects.
Enable managed eg. C++/CLI in the native project.
Instead of ...
XLSTATLINK_API double __stdcall Cpp_NOR(ST_DataSet *iData)
{
}
... you can write something like ...
ref class CPP
{
public:
static double NOR(Types::ST_DataSet^ iData)
{
if (iData->Doubles1Loaded) { ... }
return 0.0;
};
From VB.NET you can call the above function using ...
dim iData as ST_DataSet
CPP.NOR(iData)
I'm not a VB.NET coder so I can't promise the VB.NET syntax is 100%.