functionCallWithValue doesn't seem to be calling the right functions?

I'm using functionCallWithValue() to call UniswapV3's swap function. I have confirmed that the params are correct because calling the function directly works. But when I try to do so through functionCallWithValue, it errors out with 'Address: low level call with value failed'.

I thought the problem was with my use of the functionCallWithValue() function because in the docs it lists 3 arguments instead of the 2 I use here, but when I try putting 3 arguments in, it says

Member "functionCall" not found or not visible after argument-dependent lookup in address.

despite the fact that I'm importing
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
using Address for address;

:1234: Code to reproduce

IV3SwapRouter swapRouter02 = IV3SwapRouter(uniswapRouter);
            IV3SwapRouter.ExactInputSingleParams memory params = IV3SwapRouter
                tokenIn: _sellComponent,
                tokenOut: _buyComponent,
                fee: 3000,
                recipient: address(this),
                amountIn: 10**16,
                amountOutMinimum: 1,
                sqrtPriceLimitX96: 0
            //this is working
            //amountOut = swapRouter02.exactInputSingle(params);

            bytes memory callData = abi.encodeWithSignature(
            //this is not working
           bytes memory _return = uniswapRouter.functionCallWithValue(callData, 0);

:computer: Environment

Hardhat. Can provide the javascript testing snippet I'm using if necessary

I believe that you should be using swapRouter02 here, not uniswapRouter.

Using swaprouter errors out because it's of the type IV3SwapRouter, so casting it to address(swaprouter) results in the same address as uniswapRouter

This does not correspond with the code that you've posted.

Hey @benen, can you share a minimal repository that we can run?

As previously pointed out, functionCall is not in the function-call chain, since functionCall resolves to functionCallWithValue, not the other way around.

My guess is that the error is somewhere else.