public int addGroup(
        final String szName, // Group name ("" means auto)
        final boolean bActive, // Whether to activate the group
        final int dwRequestedUpdateRate, // The update rate of request (ms)
        final int hClientGroup, // The handle of client group
        final Pointer pTimeBias, // Time zone bias
        final Pointer pPercentDeadband, // Dead band
        final int dwLCID, // Region ID
        final PointerByReference phServerGroup, // Server group handler
        final IntByReference pRevisedUpdateRate, // Real update rate
        final Guid.GUID.ByReference riid, // Interface IID
        final PointerByReference ppUnk // The OPC Group pointer returned
        ) {
      // Convert Java string into COM "bstr"
      final WString wName = new WString(szName);

      return this._invokeNativeInt(
          3,
          new Object[] {
            this.getPointer(),
            wName,
            bActive ? 1 : 0,
            dwRequestedUpdateRate,
            hClientGroup,
            pTimeBias,
            pPercentDeadband,
            dwLCID,
            phServerGroup,
            pRevisedUpdateRate,
            riid != null ? riid.getPointer() : null,
            ppUnk
          });
    }
We define the OPC DA Classes and interfaces here like C's .h file.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcda/OpcDaHeader.java