OK. I've gotten into the vc dll. I added a struct command and made it a pointer. vc dll __declspec( dllexport ) double test(int j, struct collateralvar *collateral) vb declare Public Declare Function test Lib "PSAEngine.dll" Alias "_test@8" _ (ByVal j As Integer, ByRef collateral As collateralvar) As Double Now my problem is changing the values inside the dll's collateralvar struct and having vb see them. I'm passing the structure by reference so it should work but its not. Here is what I am doing inside the dll function: __declspec( dllexport ) double test(int j, struct collateralvar *collateral) { collateral->asset.cutoff_prin_bal[j]=14; return(1); } from VB I'm calling the dll this way: dim x as double collateral.asset.cutoff_prin_bal(0) = 423149.74 x = test(0, collateral) I still get 423149.74 instead of 14.0